我正在嘗試修改文本檔案的幾行。
# cat example.txt
tested
tests
testing
如果單詞'test'后面沒有'ed'或's',則將其更改為單詞'work'。以下運算式按預期作業:
test(?!ed|s)
但它不能像這樣在 sed 中作業......
# sed -r 's/test\(?!ed\|s\)/work/g' example.txt
tested
tests
testing
預期的輸出是:
tested
tests
working
我猜 sed 不支持前瞻或回溯。有沒有其他簡單的linux命令呢?
uj5u.com熱心網友回復:
perl -pe's/test(?!ed|s)/work/g' filename
對于 Unicode(非 ASCII)文本,我們需要啟用對它的支持
perl -Mutf8 -CSAD -pe'...' filename
如果源中存在文字非 ASCII 字符,則此處需要utf8 pragma ,而其他標志可以在 perlrun 中的命令開關下看到
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed -E 's/\<(test)(ed|s)?\>/\1\n\2/g;s/\<test(\S )/work\1/g;s/\n//g' file
如果一個單詞可選地以定義的結尾結尾,則在該單詞與其允許的結尾之間插入一個換行符。
如果同一個單詞沒有以換行符結尾,則將該單詞替換為work。
洗掉所有腳手架換行符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513177.html
