Articles of replace

用sedreplace多行variables

我必须创build一个脚本来replaceApache的httpd.conf文件中的几行。 我有2个问题。 首先,我如何将多行保存到一个variables中? 我试过了,但没有奏效 replace="#ErrorLog "logs/error_log" '\n' ErrorLog "|<apache_location>/bin/rotatelogs <apache_location>/logs/error.%Y.%m.%d.log 86400" '\n'没有工作来添加换行符。 然后我的想法是使用sed (1)像这样: sed -i "s#ErrorLog "logs/error_log"#$replace#g" $apache_httpd 我不知道这是否会起作用。 我能够用几行创buildvariables: VAR="#ErrorLog \"logs/error_log\"" VAR="$VAR"$'\n'"ErrorLog \"|<apache_location>/bin/rotatelogs <apache_location>/logs/error.%Y.%m.%d.log 86400\"" replace="ErrorLog \"logs/error_log\"" 现在问题出现在sed中,我不得不使用不同的分隔符( http://backreference.org/2010/02/20/using-different-delimiters-in-sed/ )。 但是它一直在失败。 sed -i "s;$replace;$VAR;g" /root/daniel/scripts/test3/httpd.conf sed:-eexpression式#1,字符54:未终止的's'命令

Cat -v的输出是什么^ K? 在mysql中使用

我已经在一个文件上运行了cat -v,看到^ K我期待看到某种空白,但不知道如何将这些代码翻译成我可以用来查找和replaceMySQL中的字符的东西。 上下文:我有一个mysql字段,似乎在最后有一个换行符,因为当我查询它,输出环绕。 从contacts_june_2013中selectt_unid_contact,concat(''',t_phone,'''),t_phone,其中T_UNID_Contact ='CN726181'; + —————- + ————————- + —— ——- + | t_unid_contact | concat(''',t_phone,'“')| t_phone | + —————- + ————————- + —— ——- + | CN726181 | “4155551212”| 4155551212 | + —————- + ————————- + —— ——- +一排(0.00秒) 我试过这些WHERE子句,试图用隐藏的字符来标识行,但是没有结果: t_phone就像'%\ n%' t_phone就像'%\ r%' t_phone就像'%\ r \ n%' t_phone就像'%\ k%' 其中t_phone正则expression式'[\ r]' […]

我遇到了Sed的麻烦

我正在尝试使用sed命令来replace这一行: charmm.c36a4.20140107.newcali4.fixhcali.grange.b 有: charmm.20140911.c36a4.3rd.ghost2.model3rd 当我使用: sed -i '/s/firstline/secondline/g' 它不起作用。 我想这些时期正在搞乱。 我如何解决这个问题?

如何从一个不可预测的格式化文件中提取单/多行正则expression式匹配的项目,并把每一个单行放入输出文件?

我有一个非常巨大的文件,看起来像这样: <a>text</a>text blah <b>data1</b>abc<b>data2</b> <b>data3</b>blahblah <c>text</c> <d>text</d> <x>blahblah<b>data4 data5 data6</b> <b>data7 </x> 也就是说,它的格式是不可预测的。 我需要提取每个<b>…</b>项目(它可能包含多行文本!),并把它们中的每一个放在一个单独的行中。 同时,我需要用一个空格replace换行符和空格。 期望的输出: <b>data1</b> <b>data2</b> <b>data3</b> <b>data4 data5 data6</b> 我发现的只有两个步骤: gawk '{if ($0 != "") { printf "%s", gensub(/\s+/, " ", "g", gensub(/\s+$/, "", "g", $0)) } }' path/to/input.txt > path/to/single-line.txt 接着 grep -Pzo '(?s)<b>.*?</b>' path/to/single-line.txt > path/to/output.txt 但我不喜欢它! 不得不将一个多GB的文本文件转换为一行…似乎不是很好。 是否有可能一次性“解决”这个问题?

如何在Linux中的多行查找和replace文本?

我正在阅读一个XML文件,并希望find此属性并将值50replace为45之前: <name>ipc.client.connect.max.retries</name> <value>50</value> 后: <name>ipc.client.connect.max.retries</name> <value>45</value> 我在用 pcregrep -M '<name>ipc.client.connect.max.retries</name>.*(\n|.)*<value>45</value>' core-site.xml findstring。 我试过了 sed 's/$string1/$string2' core-site.xml 它不工作

Bash进程replace背景与作业控制

我有一个处理一批20MiB CSV文件的脚本,可以select压缩到4MiB左右。 有成千上万的文件和处理每个单独需要大约30秒; 读取一个未压缩的文件或者一个压缩文件,并且解压缩是“几乎是即时的”,高度暗示该过程可以在过程级别上并行化。 事实上,使用复杂的Rubystream水线就是这样做的。 不过,我试图用bash把Ruby代码分解成更小的部分。 为了控制工作,我想出了这个bash函数 wait_until_job_available() { maximum_jobs=${MAXIMUM_JOBS} [ $# -eq 0 ] || maximum_jobs="${1}" exit_status=0 RUNNING_JOBS=( $(jobs -p) ) while [ ${maximum_jobs} -le ${#RUNNING_JOBS[@]} ] && [ 0 -eq "${exit_status}" ] do # `wait -n` requires bash 4.3 which is unfortunately not available on several recent RHEL-based Linux distributions such as Oracle […]

与目录的Sed错误

我试图用sed来replace文件上的某些目录。 这是我如何使用sed来取代。 sed -i "s/location_apache/$CUSTOM_INSTALL_HOME/g" $apache_boing 现在,问题出现在$CUSTOM_INSTALL_HOMEvariables中。 因为是一个目录。 每次我试图运行脚本,我得到这个错误。 sed:-eexpression式#1,字符22:未知选项到`s' 我知道这是因为$CUSTOM_INSTALL_HOMEvariables缺less\ 有这个问题的解决办法吗? 谢谢

具有特定单词时如何将第3列replace为第1列?

我有一个三列数据文件,格式如下: convicts NP convict console JJ <unknown> apples NP apple 所以,在这里,我想要在“未知”这个词的地方有控制台这个词。 PS:这是一个巨大的文件,其中包含单词“未知”多次。 所以,无论第三列出现“未知”这个词,我都希望它被相应的第一列字代替。 我尝试使用该命令 awk ' { $3="unknown"; $3=$1; print } ' <FILENAME> 但是这会用第一列的字代替整个第三列。 请帮我解决这个问题。 提前致谢!

将命令结果分配给variables时,Shell挂起

我原来的问题是在超时时杀死一个进程及其subprocess。 而且我发现GNU timeout是个不错的select。 但是,在这个testing用例中,事情变得很奇怪: 假设我们有这样的test1.sh : #!/bin/sh # test1.sh output=`timeout 2 ./run.sh` echo $output 和run.sh像这样: #!/bin/sh # run.sh sleep 8s& 直觉上我们应该期望test1.sh立即退出,因为init将负责这个愚蠢的sleep过程,然后run.sh将退出。 然而: sh-4.2$ time ./test1.sh real 0m8.022s user 0m0.013s sys 0m0.003s 如果我创build这个test2.sh : #!/bin/sh # test2.sh timeout 2 ./run.sh sh-4.2$ time ./test2.sh real 0m0.014s user 0m0.003s sys 0m0.007s 所以,显然我们在命令replace时遇到了错误,但是为什么呢?

perl -p -i -e用包含符号的文本replace行

在Linux Vm中,我试图改变50+文件的第二行。 我已经成功地将下面的命令用于没有符号的string。 perl -p -i -e 's/.*/new_line / if $.==2' . 但是现在我试图使用这个命令添加新的string“#$ new_line $”: perl -p -i -e 's/.*/# $Header$ / if $.==2' . 但是得到以下错误: Final $ should be \$ or $name at -e line 1, within string syntax error at -e line 1, near "s/.*/# $Header$ /" Execution of -e aborted due to […]