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

San*_*ing 10 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
Run Code Online (Sandbox Code Playgroud)

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

像这样的东西?

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
Run Code Online (Sandbox Code Playgroud)

cam*_*amh 5

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

sed -i '/append ro initrd=initrd.img quiet splash nbdport=2000/s/$/ video=LVDS-1:d' ...
Run Code Online (Sandbox Code Playgroud)

否则,使用 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"
Run Code Online (Sandbox Code Playgroud)


Raf*_*ael 5

sed 's/[long1][long2]/[long3][long4]/' file.txt
Run Code Online (Sandbox Code Playgroud)

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

sed 's'/\
'[long1]'\
'[long2]'\
'/'\
'[long3]'\
'[long4]'\
'/' file.txt
Run Code Online (Sandbox Code Playgroud)