在過去的 20 分鐘里,我查看了如何洗掉重復單詞的答案,試圖讓它們適用于我的用例,但這沒有用。
我有一個小命令可以洗掉特殊字符并將空格轉換為破折號,
echo "[[[h[el]lo - w{o}rld%^& -text" | tr -d '?$#@;:/\="<>%{}|^~[]&`' | tr ' ' '-'
并產生以下輸出
hello---world--text
運行完美,但我還想在該命令中添加其他內容,也許是另一個管道,以洗掉重復的破折號
例如:我希望它從生成的輸出轉換為:
hello-world-text
我怎樣才能以最符合 POSIX 的方式做到這一點?
PS:請告訴我是否有更有效的方法來完成我已經在那里完成的作業
uj5u.com熱心網友回復:
您可以-s為此使用標志:
echo "[[[h[el]lo - w{o}rld%^& -text" | tr -d '?$#@;:/\="<>%{}|^~[]&`' | tr -s ' ' '-'
-s, --squeeze-repeats
replace each sequence of a repeated character that is listed in the last
specified SET, with a single occurrence of that character
uj5u.com熱心網友回復:
對于這種特殊情況,我們可以tr洗掉除 -字母/數字 ( [:alnum:])之外的所有內容
$ echo "[[[h[el]lo - w{o}rld%^& -text" | tr -dc -- '-[:alnum:]'
hello-world-text
### or
$ tr -dc -- '-[:alnum:]' <<< "[[[h[el]lo - w{o}rld%^& -text"
hello-world-text
關鍵是表示取給定模式-c的補碼(即除 之外的所有內容)的標志。
uj5u.com熱心網友回復:
您還可以使用sed:
$ echo "[[[h[el]lo - w{o}rld%^& -text" | sed -E 's/([^-[:alnum:]]*)//g'
hello-world-text
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445474.html
