我還有另一個子域串列。我想洗掉任何Wildcard包含這些特殊字符的子域:
()!&$#* ?
大多數情況下,資料是前綴隨機的。此外,可能是中間。這是輸出資料的一些示例
(www.imgur.com
***************diet.blogspot.com
*-1.gbc.criteo.com
------------------------------------------------------------i.imgur.com
這在瀏覽串列時非常不便。與往常一樣,我正在嘗試 sed 來修復它:
sed -i "/[!()#$&? ]/d" foo.txt ###Didn't work
sed -i "/[\!\(\)\#\$\&\?\ ]/d" ###Escaping char didn't work
執行上述命令仍會生成一個unchanged串列,并且檔案仍處于原始狀態。我在想;解決此問題的方法是通過管道傳輸一系列sed命令以將其一一洗掉:
cat foo.txt | sed -e "/!/d" -e "/#/d" -e "/\*/d" -e "/\$/d" -e "/(/d" -e "/)/d" -e "/ /d" -e "/\'/d" -e "/&/d" >> foo2.txt
cat foo.txt | sed -e "/\!/d" | sed -e "/\#/d" | sed -e "/\*/d" | sed -e "/\$/d" | sed -e "/\ /d" | sed -e "/\'/d" | sed -e "/\&/d" >> foo2.txt
如果轉義所有特殊字符不起作用,那一定是我的錯誤邏輯。也嘗試過/g仍然不會增加我的運氣。
附帶說明:我不想-被洗掉,因為某些有效的子域可以具有-字符:
line-apps.com
line-apps-beta.com
line-apps-rc.com
line-apps-dev.com
任何幫助都會受到珍惜。
uj5u.com熱心網友回復:
使用sed
$ sed '/[[:punct:]]/d' input_file
這應該會洗掉所有帶有特殊字符的行,但是,如果您提供示例資料會有所幫助。
uj5u.com熱心網友回復:
在你的答案中做你想做的事情(這增加了你問題中的字符集[等等])將是:
sed '/[][!? ,#$&*() ]/d'
要不就:
grep -v '[][!? ,#$&*() ]'
根據 POSIX,要包含]在括號運算式中,它必須是第一個字符,否則它表示括號運算式的結尾。
不過,請考慮列印您想要的行,而不是洗掉您不想要的行,例如:
grep '^[[:alnum:]_.-]$' file
列印僅包含字母、數字、下劃線、破折號和/或句點的行。
uj5u.com熱心網友回復:
''最后使用@potong 提到的單引號
sed '/[\!\?\ \,\#\$\&\*\(\)\[\]\ ]/d'
不知道為什么會這樣,但 shell 總是要歸咎于目標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496171.html
