Shell-Script
刪除文本文件中的某些字元
我有一個文本文件;它的內容如下。
$ cat file.txt [] [1]foo1 bar1 [] [2]foo2 bar2 [] [35]foo3 bar3 [] [445]foo4 bar4 [] [87898]foo5 bar5
我可以使用 awk 成功刪除第一列,但無法刪除
$$ num $$字元,因為它與字元串相關聯。 我正在嘗試獲得如下輸出
$ cat file.txt foo1 bar1 foo2 bar2 foo3 bar3 foo4 bar4 foo5 bar5
$ sed 's/.*]//' file.txt | tr -s ' ' foo1 bar1 foo2 bar2 foo3 bar3 foo4 bar4 foo5 bar5
sed
刪除行上的所有內容,直到(並包括) final ,]
並將tr
多個連續空格壓縮為單個空格。或者,僅使用
sed
:sed -e 's/.*]//' -e 's/ */ /g' file.txt
使用給定的輸入數據,這將產生與第一個管道相同的輸出。
這
sed
首先會s/.*]//
刪除直到]
(包括)的所有內容。第二個表達式匹配␣␣*
,即一個空格後跟零個或多個空格,並將它們替換為一個空格。第二個表達式應用於整行,效果與 相同,即將tr -s ' '
多個連續空格壓縮為單個空格。使用
awk
:awk -F '[][:blank:]]*' '{ print $3,$4 }' file.txt
在這裡,我們使用
]
or 空格或製表符作為欄位分隔符(其中的多個可能分隔兩列,這就是我們*
在 之後使用的原因[...]
)。給定這些分隔符,所需數據在每行的欄位 3 和 4 中可用。在編輯問題中的數據以刪除最後兩列之間的一些空格後,以下內容也將完成這項工作:
cut -d ']' -f 3 file.txt
或者只是
sed 's/.*]//' file.txt
或者
awk -F ']' '{ print $3 }' file.txt