如何结合sed'句子'?

时间:2013-02-27 23:24:13

标签: linux sed

我制作了这个剧本:

xrandr | grep '*' | sed 's/\S*\(*+\)\S*//g'| sed 's/ //g' | sed 's/x.*//'

如何组合三个sed命令:

  1. sed 's/\S*\(*+\)\S*//g'
  2. sed 's/ //g'
  3. sed 's/x.*//'
  4. 成一个命令?

6 个答案:

答案 0 :(得分:3)

使用-e

xrandr | grep '*' | sed -e 's/\S*\(*+\)\S*//g' -e 's/ //g' -e 's/x.*//'

请注意,grep不是必需的:

xrandr | sed -e '/\*/!d' -e 's/\S*\(*+\)\S*//g' -e 's/ //g' -e 's/x.*//'

答案 1 :(得分:3)

您可以将这些命令放在名为sedscr的文件中,例如每行一个:

s/x.*//
s/ //g
s/\S*\(*+\)\S*//g

然后致电:

xrandr | grep '*' | sed -f sedscr

我更喜欢这种方法,以防我以后想要添加更多命令。

答案 2 :(得分:1)

您可以简单地将所有sed命令视为脚本,并在命令之间添加;

xrandr | grep '*' | sed 's/\S*\(*+\)\S*//g ; s/ //g ; s/x.*//'

答案 3 :(得分:1)

使用换行符

echo coobas | sed 's:c:f:
s:s:r:'

答案 4 :(得分:0)

没有sed,只有grep

$ xrandr | grep -oP '^\s+\K\d+(?=.*?\*)'
1440

$ xrandr | perl -lne 'print $1 if /^\s+(\d+)(?=.*?\*)/'
1440

答案 5 :(得分:0)

要考虑的另一件事是制作一个列出所有替换规则的sed配置文件(称之为 config.sed )。 E.g:

1,/^END/{
   s/x.*//
   s/ //g
   s/\S*\(*+\)\S*//g
}

然后运行

sed -f config.sed filein.txt > fileout.txt