我想產生一個sed腳本轉換不匹配行後多行模式單sed腳本打破
&&a_x* &&b_x;cx &&d_x*
到
a_x
ax
b_x
cx
d_x
dx
一個*
應觸發與刪除_
複製,一個;
一個簡單的linebreak。
我有一個SED腳本,首先插入換行符(包括;
的操作),然後執行復制的多行模式,而不使用_
。
如果將多行模式移動到單獨的腳本文件中並管道執行換行符的指令輸出,則多行模式將起作用。
由於一些奇怪的原因,一個腳本文件不會做 - 這是我想要的維護的原因。
這裏的合併版本:
#!/bin/sed -f
# Remove whitespaces
s/\ //g
# Linebreak on &&
s/\&\&/\
\&\&/g
### Linebreak on ;
s/\;/\
/g
# Remove extra new line
s/\n//
:extendvars
/^..*\*$/ {
l //DEBUG SWITCH
h
s/\(\&\|\*\)\(\&\|\*\)*//g
p
g
s/\(\&\|_\|-\|\*\)\(\&\|_\|-\|\*\)*//g
p
d
bextendvars;
}
調試開關「L」的多模式應該只匹配帶*號結束行的第一線,但所有線路和輸出
&&a_x*\n&&b_x\bx\n&&c_x*$
匹配在錯誤的組合版本中。當管道它,sed的正確識別圖案:
&&a_x*$ ... &&c_x*$
故障輸出(合併版本):
&&a_x*\n&&b_x\nbx\n&&c_x*$
a_x
b_x
bx
c_x
ax
bx
bx
cx
正確輸出中(管道版):
&&a_x*$
a_x
ax
&&b_x
bx
&&c_x*$
c_x
cx
我運行腳本
sed -f [SCRIPTNAME] <old >new
在t他的版本我已經從&&b_x
噴氣式飛機中刪除了&&
。
即使在一個腳本中執行所有語句,我如何才能讓SED識別正確的模式? 爲什麼SED突然不能匹配以*
結尾的單行?
感謝您的幫助!
完美,謝謝! –