我的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
答案 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命令,只需确保它们各自位于一个单独的行中。