Linux
如何從文件中的多行中刪除單詞後的所有內容
在以下文件中:
semi1245 5465 and taxes ?>:" foo 214 sdnfv 1>?<: Wed dsfsdf 46 and gsdgsd blah and blah taxes foo 214 sdnfv 1>?<: Wed sadfaads
我想
foo
從每一行(如果該行包含 foo)中刪除(包括 foo)之後的所有內容。我想要的輸出:
semi1245 5465 and taxes ?>:" dsfsdf 46 and gsdgsd blah and blah taxes
sed -i.bak 's/foo.*//' testfile.txt
就足夠了。
-i.bak
就地編輯您的文件,並保留原始文件的副本,副檔名為 filename.bak。
's/foo.*//'
是替換部分。‘foo.*’ 標識 ‘foo’ 後跟任意數量的字元,直到行尾。我們擷取此模式並將其替換為空字元串,從而有效地將其刪除。
這裡有幾個選擇:: 使用啟用 perl 模式的 GNU grep。
grep -Po '^.*?(?=foo|$)' file
正則表達式查找 foo OTW 的第一個匹配項,直到行尾。錨定到行的開頭 ^ 可防止對一行中的多個匹配項進行 grep ping,並且前瞻可防止 foo 包含在匹配輸出中。
使用 Posix sed 我們放置一個標記 \n 並僅在 foo 正則表達式匹配的情況下列印。OTW 列印整行。
sed -ne 's/foo/\n/;P' file
拆分 foo 上的行,以便 $1 是第一個 foo 之前的任何內容。
awk -F 'foo' 'NF>1 {$0=$1}1' file