Text-Processing

Gnu Sed:空格字元類與行尾字元不匹配

  • December 11, 2018

模式:abc 後跟空格或者是一行中的最後一個字元。

orig="abc[[:space:]]+";
new=Hello
sed -i -r -e "s|${orig}|${new}|g" ./file ;

文件:

abc
abcd
abc

abc d

執行後:

abc
abcd
abc

Hellod

預期輸出:

Hello
abcd
Hello

Hello d

我錯過了什麼?


注意:我想保留空格字元。

如果您想要保留空格:

注意:我想保留空格字元。

然後,匹配它們,但在替換時恢復它們:

orig='abc([[:space:]]+)'
new='Hello\1'
sed -E -e "s|${orig}|${new}|g" ./infile ;

這將生成此輸出(要就地修改添加適當的-i選項):

Hello  
abcd  
Hello   

Hello d

當然,這是假設文件在某些​​行的末尾有一些空格:

$ cat infile | sed -n l
abc  $
abcd  $
abc   $
$
abc d$

如果您還需要正則表達式匹配不以空格結尾的行,則需要更複雜的正則表達式:

orig='abc([[:space:]]+|$)';
new='Hello\1';
sed -E -e "s,${orig},${new},g" ./infile ;

當然,s|||必須更改分隔符s,,,以避免與|正則表達式所需的衝突。

引用自:https://unix.stackexchange.com/questions/487234