文字列を文字列自体の一部に置き換える

文字列を文字列自体の一部に置き換える

テキストファイルに保存されているデータを整理しています。各行はカテゴリラベルで始まり、その後にクリーンアップしたい実際のデータが続きます。複数のサブフォルダには多くのテキストファイルがあるため、通常はegrepファイル名をsed

CON: the Unix and Linux question
SEM: eins, the zwei, drei
AUTH: , the
AFF: The holy seat
TTITLE: As we go, the Kuckuck comes too

これで、Iで始まるすべての行で次の内容が(SEM|AFF|CON)置き換えられます。つまり、データは後で次のようになります。(T|t)he[ ]*(:|\,)

CON: Unix and Linux question
SEM: eins, zwei, drei
AUTH: , the
AFF: holy seat
TTITLE: As we go, the Kuckuck comes too

これまで、私は2つのステップ、つまり:- 部分と,- 部分を通してこれを達成しようとしました。しかし、私は最初の足を踏み出しました。

最初の部分 ファイルを認識するコマンド/モードegrep -rl ^"(SEM|CON|AFF)\: (t|T)he"は期待どおりに機能します。

今私がするとき

egrep -rl ^"(SEM|CON|AFF)\: (t|T)he" | xargs sed -i 's/\((SEM|CON|AFF)\: \)(t|T)he[ ]*/\1/g'

何もしません。私のsed部分は間違っていますか?を逆((SEM|CON|AFF)\:参照できませんか\1

第二部 ファイルを認識するコマンド/モードはですegrep -rl ^"(SEM|CON|AFF)\:.*\,[ ]*(t|T)he"。これも期待どおりに機能します。しかし、sedこれまで試したすべての組み合わせはコンテンツを削除します。

ベストアンサー1

私は以下を使用します:

sed -r '/(SEM|AFF|CON)/ s/([:,] *)[Tt]he */\1/g' file

-iファイルを所定の位置に変更するオプションが追加されました。

おすすめ記事