私は次のようにしている行を持つファイルをたくさん持っていると>置き換えます"sedの正規表現
#include "3rd-party/*lots folders*>
問題は、それが>
代わりの"
ありで終わるということですsedのための迅速な正規表現はそれを変更するには?
を基本的には、行が#include "3rd-party
で始まる場合、それは"
に最後の文字を置き換える必要があります。
事前
私は次のようにしている行を持つファイルをたくさん持っていると>置き換えます"sedの正規表現
#include "3rd-party/*lots folders*>
問題は、それが>
代わりの"
ありで終わるということですsedのための迅速な正規表現はそれを変更するには?
を基本的には、行が#include "3rd-party
で始まる場合、それは"
に最後の文字を置き換える必要があります。
事前
のおかげでは、基本的には使用することができます。
sed '/^[[:space:]]*#include "3rd-party/s/>[[:space:]]*$/"/' file
説明:
/^[[:space:]]*#include/
アドレス、正規表現アドレスです。後続のコマンドは、任意のスペースの後に#include
ステートメントが続く行に適用されます。s/>[[:space:]]*$/"/
は、>
の後にオプションのスペースと行末を"
で置き換えます。束に sed -i '/^[[:space:]]*#include/s/>[[:space:]]*$/"/' file
、のC
ファイルを言わせて、find
を使用して、それは-exec
オプションです:
は、あなたが場所でファイルを変更したい場合は-i
オプションを使用し
find . -name '*.c' -exec sed -i '/^[[:space:]]*#include/s/[[:space:]]*$/"/' {} \;
th次のとおりです。
sed -i '' '/^[[:blank:]]*#include "3rd-party/s/>$/"/' file
#include "3rd-party/*lots folders*"
あなたはパターンを検索し、あなたがしたいアクションが>
>$
に沿って最後cahracterを交換している
sed '/search_pattern/{action}' your_file
のようにこの行のアクションを行うため
sed
を使用することができますあなたの望む文字であり、
$
は、検索された文字が行の最後に置かれなければならないことを意味します。
sed
コマンドs///
は、s/search_pattern/replace_pattern/
のように動作します。
これは以下のようにあなたの目標を探します:
sed '/#include "3rd-party/{s/>$/"/}' your_file
しかしsed
ので、(S)tream(ED)であるitorあなたはそれがに>
に変更はインラインまたはパイプ作るためのsedコマンドフラグ-i
を使用する必要があります新しいファイル。この
sed -i '/#include "3rd-party/{s/>$/"/}' your_file
またはこのような
sed '/#include "3rd-party/{s/>$/"/}' your_file > new_file
同様
が、これはあなたの作業を行う場合は私に知らせてください。
'[[:blank:]]'は 'sed'が理解できる文字クラスではありません。 – hek2mgl
これは正しくありません。私はOSXの 'sed'と' gnu sed'を使ってテストしました。 – anubhava
それは隠された "機能"です。 manページの後には '[[:space:]]' – hek2mgl