文字列を別の文字列に置き換える

文字列を別の文字列に置き換える

csvファイルから始まる行

14/Feb/2016:15:21:33-0500]http://map1.link.de/mk

交換/削除と追加が最も簡単な部品は何ですか?

]http://map1.link.de/

そして

,

mapどんな数でも可能であることを覚えておいてくださいmap1, map2, map3

数行の例:

14/Feb/2016:15:21:33-0500]http://map1.link.de/mk
14/Feb/2016:16:21:33-0500]http://map5.link.de/mk

最終結果

14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

答え1

私は以下を使用しますsed

sed 's/\(.*\)].*\/\(.*$\)/\1,\2/' csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

csvこのファイルはどこにありますか?

cat csv 
14/Feb/2016:15:21:33-0500]http://map1.link.de/mk
14/Feb/2016:16:21:33-0500]http://map5.link.de/mk


説明:
\(.*\)]=検索と救う最初の[
.*\/=までの各文字の後に検索 - 実行いいえ保存 - 最後まですべて/
\(.*$\)=救うその後、行末まで(mk
\1,\2=私たちが保存したものに置き換えられ、間にカンマを追加します。

答え2

次のように、拡張[0-9]\{1,\}正規表現演算子を使用して、POSIXly または移植性が低下する 1 つ以上の 10 進数のシーケンスを表すことができます。+[0-9]+

sed 's@]http://map[0-9]\{1,\}\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

または

sed -E 's@]http://map[0-9]+\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

変えたいならどの完全修飾ホスト名が一致するURIだけでなく、URIを使用すると、map?.link.de後者を次のように単純化できます。

$ sed -E 's@]http://[^/]*/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

関連情報