2016-08-09 2 views
-2

私は次のようにしている行を持つファイルをたくさん持っていると>置き換えます"sedの正規表現

#include "3rd-party/*lots folders*> 

問題は、それが>代わりの"

ありで終わるということですsedのための迅速な正規表現はそれを変更するには?

を基本的には、行が#include "3rd-partyで始まる場合、それは"に最後の文字を置き換える必要があります。

事前

答えて

2

のおかげでは、基本的には使用することができます。

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:]]*$/"/' {} \; 
3

th次のとおりです。

sed -i '' '/^[[:blank:]]*#include "3rd-party/s/>$/"/' file 

#include "3rd-party/*lots folders*" 
+0

'[[:blank:]]'は 'sed'が理解できる文字クラスではありません。 – hek2mgl

+3

これは正しくありません。私はOSXの 'sed'と' gnu sed'を使ってテストしました。 – anubhava

+0

それは隠された "機能"です。 manページの後には '[[:space:]]' – hek2mgl

0

あなたはパターンを検索し、あなたがしたいアクションが>>$に沿って最後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 

同様

が、これはあなたの作業を行う場合は私に知らせてください。