Articles of sed

用awk或sedreplace和增加字母和数字

我有一个包含的string fastcgi_cache_path /var/run/nginx-cache15 levels=1:2 keys_zone=MYSITEP:100m inactive=60m; 这个脚本的目标之一就是根据前一个文件的值查找来增加nginx-cache的两位数字。 为了做到这一点,我使用这个代码: # Replace cache_path PREV=$(ls -t /etc/nginx/sites-available | head -n1) #find the previous cache_path number CACHE=$(grep fastcgi_cache_path $PREV | awk '{print $2}' |cut -d/ -f4) #take the string to change SUB=$(echo $CACHE |sed "s/nginx-cache[0-9]*[0-9]/&@/g;:a {s/0@/1/g;s/1@/2/g;s/2@/3/g;s/3@/4/g;s/4@/5/g;s/5@/6/g;s/6@/7/g;s/7@/8/g;s/8@/9/g;s/9@/@0/g;ta};s/@/1/g") #increment number sed -i "s/nginx-cache[0-9]*/$SUB/g" $SITENAME #replace number 也许不是那么优雅,但它的作品。 另一个目标是增加所有出现的MYSITE x的最后一个字母( MYSITEP ,在这种情况下,应该变成MYSITE […]

在linux中使用sedreplacestring后得到一个额外的数字

对于sed来说,这是一个真正的问题。 我有一个原始的input文件如下。 R shthk 0.900000 R mue 0.054100 R nue 0.121400 R oue 0.137700 R ystress 150.23000 我有一个名为Friction1.k的文件,其值为0.123200 。 我想在我的模拟过程中将mue的值更改为该文件中给出的值。 我使用下面的sed脚本。 sed '/\<mue\>/!d;=;s/.* \([^ ]\+\).*/\1/;R Friction1.k' dynaRcoupledmodel.k | sed 'N;N;s|\n|s/|;s|\n|/|;s|$|/|;q' >temp.sed sed -i -f temp.sed dynaRcoupledmodel.k 所以它改变 R shthk 0.900000 R mue 0.123200148 R nue 0.121400 R oue 0.137700 R ystress 150.23000 该软件对格式非常严格,所以我使用这个命令的时间是148或155或159来的额外,我得到* PARAMETER试图改变固有的时间的错误。 之前它为我工作得很好,但现在这是给错误。 […]

sed问题 – 从文件中提取特定的单词

我想得到一些SED的帮助。 我试图从文件中提取一些文件,我需要的所有单词都是这样开始的。 39;,bugs.pr~%3D~'TEXT23 我需要得到TEXT23例如。 我做了什么,首先换ID,这是我的标志,然后searchIDEX,并从那个字中提取8个字符。

如何从差异中获得唯一的区别

我有这个代码,如何改进它 diff -b -i -w out.txt out2.txt | grep '^>' | sed 's/^>//g' | sed ':a;N;$!ba;s/\n/ /g' 示例数据(out.txt) abc def ghk abc def2 ghk abc def ghk 123 333 555 566 3423 23 566 3423 3542 示例数据(out2.txt) abc def2 ghk abc def ghk abc def ghk 123 555 555 fsdjhfsda sd 566 3423 3542 预期结果 […]

如何在Linux中search两个不同date的日志文件

我正在使用基于RPM的发行版,并且我想dynamicsearch日志文件以查看当天的date和昨天的date以输出报告。 string必须是dynamic的(没有egrep“\ b2012-10- [20-30] \ b”),这意味着我可以采取相同的单行或脚本,search今天的date和昨天的date的文件,并打印一些输出。 基本上search日志文件的特定条目。 这是我得到的,但我想用dynamic的东西来取代egrep: grep "No Such User Here" /var/log/maillog | egrep "\b2012-10-2[3-4]\b" | cut -d "<" -f 3 | egrep -o '\b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b' | cut -d "@" -f 2 | sort -d |uniq -ci | awk -F" " '{ print "Domain: " $2 " has been sent " $1 " messages […]

使用sed在脚本中编辑一个urlstring

我需要在configuration文件中编辑这些string <port>8189</port> <service>127.0.0..1:8190</service> <wan-access>localhost</wan-access> 我努力了 . variables.sh cat config.sh | sed -i.bk \ -e 's/\<^port\>\/'$port'/\<\/\port\>/' \ -e 's/\<^service\>\/'$url'/\<\/\service\>/' \ -e 's/\<^wan-access\>\/'$url2'/\<\/\wan-access\>/' config.sh 在脚本中,variables由variables.sh文件提供。 出来应该是 <port>8787</port> <service>my.domain.com:8190</service> <wan-access>my.realdomain.com</wan-access>

在通过curl获取的两个文件之间添加一个新行

我有这个命令获取2个文件,执行一些格式化并输出结果。 curl https://www.cloudflare.com/ips-v{4,6} | sed 's/^/set_real_ip_from /;s/$/\;/' \ > /home/user/output.txt 它工作得很好,问题是如何添加文件1和文件2之间的换行符(保留对格式的更改)?

sed两种模式search,并在第二种模式发生后追加线

以下sed问题在过去的两天里给了我很多的麻烦。 我有以下文件(iptables) : someline someline *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] someline 我想使用sedsearch模式*filter ,如果匹配,然后search第二个模式[0:0] ,然后在第二个模式的最后一次出现后添加一行。 这(理想情况下)会导致: someline someline *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] TESTLINEADDEDBYSED someline 这里的论坛给了我一个好的开始,但是我不能解决这个具体问题。 我到目前为止有以下解决scheme,但它添加第一个出现的第二个模式[0:0] : sed -n '/\*filter/{:a;N;/^\n/s/^\n//;/\[0:0\]/{!ba;p;s/.*/TESTLINEADDEDBYSED/;};ba}; p' file 我是在第二个分支我会消耗(读:skip?)第一次出现[0:0]的假设.* 我在这里误解了什么?

使用sed将缺less的ServerName添加到httpd.conf文件中

我在httpd.conf文件中有以下虚拟主机 <VirtualHost *:80> ## could be comments could be any line could be any line could be any line </VirtualHost> <VirtualHost *:80> could be any line ## could be comments could be any line could be any line could be any line could be any line could be any line </VirtualHost> <VirtualHost *:80> ## may […]

用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'命令