我有一個像這樣的文本檔案,
#green??
<????????>
action?????mysql
admin2??
預期的輸出是,
#green ??
< ???????? >
action ????? mysql
admin2 ??
這是我到目前為止嘗試做的,sed 's/[?-?].*/ &/g' testfile但我得到的輸出是這樣的,
#green ??
< ????????>
action ?????mysql
admin2 ??
無論如何可以使用 awk 或 sed 來獲得預期的輸出嗎?
uj5u.com熱心網友回復:
你可以在這里使用 Perl:
perl -i -CSD -Mutf8 -pe 's/(?<=[?-?\p{M}])(?=[^?-?\p{M}])|(?<=[^?-?\p{M}])(?=[?-?])/ /g' filename
請參閱正則運算式演示。查看在線演示:
#!/bin/bash
s='#green??
<????????>
action?????mysql
admin2??'
perl -CSD -Mutf8 -pe 's/(?<=[?-?\p{M}])(?=[^?-?\p{M}])|(?<=[^?-?\p{M}])(?=[?-?])/ /g' <<< "$s"
輸出:
#green ??
< ???????? >
action ????? mysql
admin2 ??
正則運算式匹配
(?<=[?-?\p{M}])(?=[^?-?\p{M}])-[?-?]范圍中的梵文字母或變音符號 (\p{M}) 與除梵文字母和變音符號之外的字符之間的位置|- 要么(?<=[^?-?\p{M}])(?=[?-?])- 位于天城字母以外的字符與變音符號和天城字母或變音符號之間的位置。
uj5u.com熱心網友回復:
匹配行的.*整個其余部分,并使g標志無用。假設字符類是正確的(對不起,我不熟悉梵文)你可以使用
sed 's/[?-?]\ / & /g' testfile
盡管您最終可能會想要洗掉一些額外的空格。
sed 's/[?-?]\ / &/g;
s/^ //;s/ $//;s/ / /g' testfile
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/447759.html
