Shell-Script

刪除文本文件中的某些字元

  • April 16, 2018

我有一個文本文件;它的內容如下。

$ 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

引用自:https://unix.stackexchange.com/questions/438105