
name.txt
次の文字列で呼び出されたファイルにリストされています。
Los Angeles, CA us1.vpn.goldenfrog.com
Washington, DC us2.vpn.goldenfrog.com
Austin, TX us3.vpn.goldenfrog.com
Miami, FL us4.vpn.goldenfrog.com
New York City, NY us5.vpn.goldenfrog.com
Chicago, IL us6.vpn.goldenfrog.com
San Francisco, CA us7.vpn.goldenfrog.com
Amsterdam eu1.vpn.goldenfrog.com
Copenhagen dk1.vpn.goldenfrog.com
Stockholm se1.vpn.goldenfrog.com
Hong Kong hk1.vpn.goldenfrog.com
London uk1.vpn.goldenfrog.com
*.vpn.goldenfrog.com
さて、sedを使って前の内容(3文字)をすべて削除したいと思います*
。
私が望む出力:
hk1.vpn.goldenfrog.com
dk1.vpn.goldenfrog.com
etc ...
答え1
必要でない場合は、sed
次のawk
プロセスで削除できます。
awk '{print $NF}' filename
答え2
解決策が必要な場合sed
:
sed 's/.*[[:blank:]]\([^[:blank:]]*\)$/\1/' file.txt
キャプチャされたグループ(\1
)には、置換に使用される最後のスペースの後の行部分が含まれます。
例:
% sed 's/.*[[:blank:]]\([^[:blank:]]*\)$/\1/' file.txt
us1.vpn.goldenfrog.com
us2.vpn.goldenfrog.com
us3.vpn.goldenfrog.com
us4.vpn.goldenfrog.com
us5.vpn.goldenfrog.com
us6.vpn.goldenfrog.com
us7.vpn.goldenfrog.com
eu1.vpn.goldenfrog.com
dk1.vpn.goldenfrog.com
se1.vpn.goldenfrog.com
hk1.vpn.goldenfrog.com
uk1.vpn.goldenfrog.com
grep
これも簡単に行えます。
% grep -o '[^[:blank:]]*$' file.txt
us1.vpn.goldenfrog.com
us2.vpn.goldenfrog.com
us3.vpn.goldenfrog.com
us4.vpn.goldenfrog.com
us5.vpn.goldenfrog.com
us6.vpn.goldenfrog.com
us7.vpn.goldenfrog.com
eu1.vpn.goldenfrog.com
dk1.vpn.goldenfrog.com
se1.vpn.goldenfrog.com
hk1.vpn.goldenfrog.com
uk1.vpn.goldenfrog.com
答え3
ファイルがスペースで区切られていると仮定すると、最後のスペース文字まで各行の内容を簡単に削除できます。
$ sed 's/.* //' file
us1.vpn.goldenfrog.com
us2.vpn.goldenfrog.com
us3.vpn.goldenfrog.com
us4.vpn.goldenfrog.com
us5.vpn.goldenfrog.com
us6.vpn.goldenfrog.com
us7.vpn.goldenfrog.com
eu1.vpn.goldenfrog.com
dk1.vpn.goldenfrog.com
se1.vpn.goldenfrog.com
hk1.vpn.goldenfrog.com
uk1.vpn.goldenfrog.com
ファイルがタブ文字を区切り文字として使用する場合は、式に[[:blank:]]
テキストの代わりにスペース文字を使用できます。これはタブと一致しますまたはスペース文字:
sed 's/.*[[:blank:]]//' file
cut
最初に各行を反転してから、最初のフィールドを削除した結果を反転して、タブで区切られた最後のフィールドを取得することもできます。
rev file | cut -f 1 | rev
データに正確に2つのタブで区切られたフィールドがあり、そのうちの2番目のフィールドが必要な場合ははるかに簡単です。
cut -f 2 file