我有一個文件,它有多行。Bash腳本刪除文件中的一行
例如:
a
ab#
ad.
a12fs
b
c
...
我想用sed
或awk
刪除線,如果線包括符號或數字。 (例如,我想刪除:ab#,ad。,a12fs ....行) 或換句話說,我只想保留包含[a-z] [A-Z]的行。
我知道怎麼刪號線,
sed '/[0-9]/d' file.txt
,但我不知道如何刪除符號線。
或者有沒有簡單的方法可以做到這一點?
我有一個文件,它有多行。Bash腳本刪除文件中的一行
例如:
a
ab#
ad.
a12fs
b
c
...
我想用sed
或awk
刪除線,如果線包括符號或數字。 (例如,我想刪除:ab#,ad。,a12fs ....行) 或換句話說,我只想保留包含[a-z] [A-Z]的行。
我知道怎麼刪號線,
sed '/[0-9]/d' file.txt
,但我不知道如何刪除符號線。
或者有沒有簡單的方法可以做到這一點?
grep的工作也很好,是更簡單:只是做相反:保留您感興趣的線路,這是比較容易的方式來定義
grep -i '^[a-z]*$' file.txt
(只包含字母和空行匹配線,並-i
選項使得grep的不區分大小寫)
刪除空行,以及:使用Windows的文本文件時
grep -i '^[a-z]+$' file.txt
小心,因爲還有在該行的最後一個回車,所以沒有什麼會根據grep的版本匹配(在Windows這裏測試和它的作品)
但以防萬一:
grep -iP '^[a-z]*\r?$'
(注意-p選項使perl的表達式或\r
無法識別)
您可以使用此sed
:
sed '/^[A-Za-z0-9]\+$/!d' file
(OR)
個sed '/[^A-Za-z0-9]/d' file
爲了保持空白行:
grep '^[[:alpha:]]*$' file
sed '/[^[:alpha:]]/d' file
awk '/^[[:alpha:]]*$/' file
要刪除空行:
grep '^[[:alpha:]]+$' file
sed -E -n '/^[[:alpha:]]+$/p' file
awk '/^[[:alpha:]]+$/' file
$ awk '!/[^[:alpha:]]/' file.txt
a
b
c
'/ [^ [:阿爾法:]]!/'手段「** NOT **包含** NOT **字母「的字符」,這是雙重否定的,因此如果可能的話最好避免。 –
@Ed Morton,我在你的回答中看到你如何處理'awk'解決方案,而你的方法當然是有道理的。也就是說,這個解決方案怎麼會有問題,或者你能否指出我的方向,我可以讀到關於爲什麼我應該避免使用雙重否定的方法。謝謝。 – user3439894
無論是編程語言還是口頭語言,雙負片都很難理解,負片的負片是正片( - ( - 1)= 1),所以無論何時遇到一個書寫編碼,您都應該花時間找出積極的條件是什麼,然後寫出來。爲了擴大這一點 - 不要以負面的方式寫變量(例如'databaseNotAvailable'),因爲你幾乎可以保證必須在某處寫入雙重否定(例如'!databaseNotAvailable')。與'!databaseIsAvailable'和'databaseIsAvailable'比較)。對不起,我不知道一個很好的參考。 –