sed
スラッシュで区切られた同じ数の2つのインスタンスをこの数の1つのインスタンスに置き換えたいと思います。私の入力ファイルには次の行があります。
text (1982/1982) text
text (1983/1983) text
text (1984/1984) text
私は次の出力が欲しい:
text (1982) text
text (1983) text
text (1984) text
入力ファイルにスラッシュで区切られた別の数値文字列がある可能性があるため、括弧を一致させる必要があります。
存在するBBエディタ検索モードと交換モードを使用して\(([0-9]{4})/\1\)
これを行うことができます\(\1\)
。しかし、sed
同等の拡張正規表現では動作しないようです。
echo 'text (1984/1984) text' | sed -E 's_\(([0-9]{4})/\1\)_\(\1\)_g'
返品:
text (1984/1984) text
しかし、私は欲しい:
text (1984) text
これを実行できる拡張正規表現は何ですかsed
?
私はmacOSに組み込まれているものを使用していますsed
。
答え1
OSXバージョンはsed
かなり迷惑です(実際にはBSDバージョン)。私は通常Brewを介してGNUをインストールしますsed
:
$ brew search sed
==> Formulae
gnu-sed ✔ libxdg-basedir minised ssed
==> Casks
eclipse-dsl marsedit
exoduseden microsoft-bing-ads-editor
focused osxfuse-dev
google-adwords-editor physicseditor
lego-mindstorms-education-ev3 prefs-editor
licensed subclassed-mnemosyne
インストールしてください:
$ brew install gnu-sed
その後、次のように使用できます。
$ gsed ....
チャジャン、今あなたの例は動作します。
$ echo 'text (1984/1984) text' | sed -E 's_\(([0-9]{4})/\1\)_\(\1\)_g'
text (1984/1984) text
$ echo 'text (1984/1984) text' | gsed -E 's_\(([0-9]{4})/\1\)_\(\1\)_g'
text (1984) text