csvファイルに必要なデータに合わない複数の行があります。たとえば、次はexample.csvファイルです。
14/Feb/2016:13:21:33-0500,mk
15/Feb/2016:14:21:33-0500,mk
16/Feb/2016:15:21:33-0500]http://map1.link.de/mk
17/Feb/2016:16:21:33-0500]http://map5.link.de/mk
以下を使用して行を取得および変更できます。
$ cat example.csv | grep "map" | sed 's/\(.*\)].*\/\(.*$\)/\1,\2/'
結果:
16/Feb/2016:15:21:33-0500,mk
17/Feb/2016:16:21:33-0500,mk
しかし、私が本当に欲しいのは、それを修正して同じファイルに保存することです。どうすればいいですか?
ベストアンサー1
GNU Sedを使用している場合は、以下を実行してください。
sed -i '/map/s/\(.*\)].*\/\(.*$\)/\1,\2/' example.csv
警告する:これにより、ファイルの内容が上書きされます。正規表現が正しいかどうかわからない場合は、まずコピーを作成してください。正確にあなたは何が欲しいですか?
もしあなたならいいえGNU Sedがあるか、すべてのPOSIXシステムで実行できるより移植性の高いソリューションが必要です。使用ex
:
ファイルを編集せずにテストを実行するには:
printf '%s\n' 'g/map/s/\].*\/\([^/]*\)$/,\1/' %p | ex example.csv
結果が満足な場合は、変更を保存してください。
printf '%s\n' 'g/map/s/\].*\/\([^/]*\)$/,\1/' x | ex example.csv