一个长期的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 

它可以被分成几行来使它更清楚它是干什么的?

例如像?

 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 

有几种方法可以使这个更小。 如果您只是将文本追加到行的末尾,可以像这样使用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" 
 sed 's/[long1][long2]/[long3][long4]/' file.txt 

您可以使用通常的反斜杠来将表达式分散在多行上。 重要的是,反斜杠后面的行在开始时并不包含空格。

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

这可能适合你:

 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 

注意替换的右边的&表示左手边上的所有匹配正则表达式

正则表达式并不意味着使用这么长的表达式,为什么不像这样快捷的针头:

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

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

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

桑德拉,你可以把这个大的sed命令放在一个文件中,比如说tftp.sed并调用sed,像sed -i -f tftp.sed /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default其中tftp.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命令,只要确保它们在一个单独的行中。