1行のテキストの一部を見つけ、同じ行の別の部分に追加

1行のテキストの一部を見つけ、同じ行の別の部分に追加

私はこれを持っています:

Issue #12345: some more text here https://some.domain/some/path

ビット12345(動的であるため正規表現を渡す必要がある)を見つけ、同じ行の末尾に追加したいと思います。このように:

Issue #12345: some more text here https://some.domain/some/path/12345

sed / awkを使用してこれをどのように達成できますか?

PS:私は周りを見回しましたが、同様の質問は次のとおりです。文字列の一部を同じ文字列の別の部分に置き換える...しかし、正規表現ビットがありません。

ベストアンサー1

入力がtest.txtファイルにあると仮定すると、次のコマンドが機能します。

sed -E 's/^(.*)([[:digit:]]{5})(.*)$/\1\2\3\/\2/g' test.txt

ファイルから直接読まない場合は、

input_source | sed -E 's/^(.*)([[:digit:]]{5})(.*)$/\1\2\3\/\2/g'

出力:

Issue #12345: some more text here https://some.domain/some/path/12345

このコマンドの機能は次のとおりです。

^(.*)ファイルの先頭から始めて、次の一致が ([[:digit:]]{5})次の5桁に一致するまですべてを取得します。一致する各グループ(.*)$に番号が付けられた(この場合は1-3)、ファイルの終わりまですべてをインポートし、 \1\2\3\/\2出力を変換してインポートします。元のテキスト(1-3と一致)、「/」、および2番目の一致。

後で参照できるように問題をより具体的に説明できる場合は理想的です。たとえば、1行の最初の5桁の数字を探し、その数字(先行スラッシュを含む)を行の末尾に追加し、入力内のすべての行に対してこれを行うとします。私はそれがあなたが意味するものだと思いました。そうでない場合は、質問をより具体的に更新する必要があるかもしれません。

以前の質問を引用するよりも、自分が試したいくつかの試みをリストすることもできます。また、あなたがしたいことをよりよく理解するのに役立ちます。

おすすめ記事