したがって、次の形式のコンテンツを含むファイルがあります。
randomString abc\/def/ghi/mno\/pq/r abc\/def\/ghi/mno\/pq/r
私の意図は、2つの英数字文字列の間のすべての項目を終わる単語にorがない場合に置き換えることです。/
したがって、理想的には次のようになります。\/
\
/
randomString abc\/def\/ghi\/mno\/pq/r abc\/def\/ghi\/mno\/pq/r
これでほぼ結果が得られるregEx
perl -pe 's/(\/\w+)\/(\w+\/|\w+\\)/$1\\\/$2/g' file
これは私に戻ります。
randomString abc\/def\/ghi/mno\/pq/r abc\/def\/ghi\/mno\/pq/r
ghi/mno
何らかの理由で文字列の一部が変更されていない理由はわかりません。
perl
コマンドラインでこれを行う方法を探しています。
答え1
プレビューを使用して、次のスラッシュのみを置き換えることができます。
(?<!\\)
前にバックスラッシュはありません。(?!\w+\s)
スペースで終わる後続の単語文字はありません。
例えば
echo 'randomString abc\/def/ghi/mno\/pq/r abc\/def\/ghi/mno\/pq/r' |
perl -pe 's;(?<!\\)/(?!\w+\s);\\/;g'
randomString abc\/def\/ghi\/mno\/pq/r abc\/def\/ghi\/mno\/pq/r