可以在几行中分解长sed命令吗?

时间:2011-11-10 11:34:28

标签: linux bash command-line sed

我的sed命令很长

sed -i 's/append ro initrd=initrd.img quiet splash nbdport=2000/append ro initrd=initrd.img quiet splash nbdport=2000 video=LVDS-1:d/g' /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

可以分解几行以使其更清楚它的作用吗?

E.g。像什么?

sed -i 's/
append ro initrd=initrd.img quiet splash nbdport=2000
/
append ro initrd=initrd.img quiet splash nbdport=2000 video=LVDS-1:d
/g'
/var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

6 个答案:

答案 0 :(得分:5)

sed 's/[long1][long2]/[long3][long4]/' file.txt

你可以使用通常的反斜杠在多行上传播表达式。重要的是,反斜杠后面的行在开头没有空格。

sed 's'/\
'[long1]'\
'[long2]'\
'/'\
'[long3]'\
'[long4]'\
'/' file.txt

答案 1 :(得分:4)

有几种方法可以让它变小。如果您只是将文本附加到行尾,则可以像这样使用sed:

sed -i '/append ro initrd=initrd.img quiet splash nbdport=2000/s/$/ video=LVDS-1:d' ...

否则,使用shell变量将其拆分一点。

PXE_BOOT_FILE=/var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default
SEARCH_PATTERN='append ro initrd=initrd.img quiet splash nbdport=2000'
REPLACE_PATTERN="$SEARCH_PATTERN video=LVDS-1:d"
sed -i "s/$SEARCH_PATTERN/$REPLACE_PATTERN/g" "$PXE_BOOT_FILE"

答案 2 :(得分:2)

这可能对您有用:

sed -i 's/append ro initrd=initrd.img quiet splash nbdport=2000/& video=LVDS-1:d/g' /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

string="append ro initrd=initrd.img quiet splash nbdport=2000"
sed -i 's/'"$string"'/& video=LVDS-1:d/g' /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

N.B。替换右侧的&表示左侧的所有匹配正则表达式

答案 3 :(得分:1)

是的它可以,像往常一样引用它:

sed 's/foo/bar/g
     s/baz/quux/g'

答案 4 :(得分:1)

正则表达式并不意味着使用如此长的表达式,为什么不像这样简化指针:

sed -i 's/nbdport=2000/nbdport=2000 video=LVDS-1:d/g' /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

答案 5 :(得分:0)

Sandra,你可以选择将那个大的sed命令放在一个文件中,比如说tftp.sed并调用像sed -i -f tftp.sed /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default这样的tftp.sed文件的sed:

# my very long line:
s/append ro initrd=initrd.img quiet splash nbdport=2000/append ro initrd=initrd.img quiet splash nbdport=2000 video=LVDS-1:d/g
# note: every sed command in this file must be in a separate line

如您所见,您可以在sed源文件中包含多个sed命令,只需确保它们各自位于一个单独的行中。