テキストファイルから特定の文字を削除する

テキストファイルから特定の文字を削除する

テキストファイルがあります。内容は次のとおりです。

$ 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

ベストアンサー1

$ sed 's/.*]//' file.txt | tr -s ' '
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5

sed最後の行まで(および含む)行のすべての内容を削除し、]複数trの連続した空白を単一の空白に圧縮します。

または以下を使用してくださいsed

sed -e 's/.*]//' -e 's/  */ /g' file.txt

与えられた入力データを使用すると、最初のパイプラインと同じ出力が生成されます。

sedこれを最初に実行すると、s/.*]//以前のすべての項目が削除(含まれています)されます]。 2番目の式は、␣␣*空白の後にゼロ個以上の空白が続くものと一致し、それを単一の空白に置き換えます。 2番目の式は行全体に適用され、同じ効果を持ちますtr -s ' '。つまり、複数の連続したスペースを単一のスペースに圧縮します。


使用awk:

awk -F '[][:blank:]]*' '{ print $3,$4 }' file.txt

ここでは、スペースまたはタブをフィールド区切り文字として使用します](これらのうち2つ以上が2つの列を分離できるため、*後で使用します[...])。これらの区切り文字を使用すると、各行のフィールド 3 と 4 で必要なデータを使用できます。


最後の2つの列の間にあるスペースを削除するために質問のデータを編集した後、次の操作も実行されます。

cut -d ']' -f 3 file.txt

それとも

sed 's/.*]//' file.txt

または

awk -F ']' '{ print $3 }' file.txt

おすすめ記事