2013-04-15 7 views
5

私の具体的な状況では、URLを格納する変数を含む数百のファイルをループする必要があります。 URLのすべてが異なっているが、この例のために、我々は、すべてのURLがありますので、すぐにCOMsedを使用してファイル内のパターンを別のパターンを含む行に置き換える方法

次彼らに「COM」」私はいくつかのテキストを追加する必要が

持つすべてのエンドを想定することができます

01:ファイルは、COMを含むことができ、他の行が含まれている、私のようなものを使用することはできませんので

sed -i 's/^ENVIRONMENT="someurl.com"/ENVIRONMENT="someurl.com.origin.net"/g'

:私はのようにsedコマンドを使用することはできません異なるドメイン

sed -i 's/com/com.origin.net/g'

私は、この検索を行うと、このような正規表現で以下の私の例などから、パターンのみを含む特定の行に置き換える必要があります。

^ENVIRONMENT.*

もし私が上記のパターンにマッチした行だけにsedの使用を集中できれば、sedのようなsed -i 's/com/com.origin.net/g'。私はもちろん、これを行うにはあまりにも複雑なbashスクリプトを書くことができますが、私はパターンを見つけるためにsedに伝えるいいライナー方法があることを知っています、パターンが見つかった行だけで検索し、新しい文字列で

https://unix.stackexchange.com/questions/37518/how-to-sed-only-that-lines-that-contains-given-string

が、それは十分に私の質問に答えていませんでした:グーグル、私はこのことについて見つけた唯一の半関連リンクを検索するには

でした。また、一般にsedをパターンにマッチする行に制限することができるのは、sed arsenalを追加する素晴らしいツールです。

ここで解決策につながるヘルプは非常に高く評価されます。ここで

は、私が「ENVIRONMENT = "someurlを交換したいファイル

### Example File
#
#
# someurl.com

ENVIRONMENT="someurl.com"

の一例ですfに対する

`:.COM」ENVIRONMENT =」と『『someurl.com.orign.net』』

私はおそらくのような1行のシェルスクリプトでこのポスト由来のsedコマンドを挿入しますin * .config; do File2BeEdited = $(cat $ f | grep^PatternToIdentifyLine | grep -v RemoveLinesThatAreAlreadyCorrect); if ["$ File2BeEdited"!= ""];次にRunSedCommand; printf "\ n編集が必要なファイルを見つけます。あなた:次のコマンドラインは2つの解決策を示しているので、私は選択のディレクトリ内のすべての構成ファイルをループし、この変更を行うことができ

を行って

答えて

9

を; \ nRunningは、$ F >> log.log」上のsedなど、

sed -e '/^\(ENVIRONMENT="[^"]*\.com\)"/s//\1.origin.net"/' 
+0

感謝。特に一致したテキストを挿入できること。私があなたが提供した答えの一致したテキスト置換の側面の私の理解を明確にするだけです。私は\ 0で何ができますか?また、たとえば\ 2を使用すると、この挿入はregexの2番目に一致するテキストを表示しますか?たとえば、一致するパターンが2つある行を検索していたとします。 – Matthew

+1

GNU sedマニュアルを見てください:[正規表現のバックリファレンス](http://www.gnu.org/software/sed/manual/sed.html#index-Backreferences_002c-in- regular-expressions-103) – nosid

+0

'sed'が呼び出すアドレスを使用していますか? – Geremia

-2

/regex/で特定の行への交換を制限することができます。そして、あなたは\0\1と交換にマッチしたテキストを使用することができますあなたは...

のgvimでそれを行うことができます

:g/^ baz/s/foo/bar/g

説明:bazで始まるすべての行で、fooのすべての出現をbarに置き換えます。詳細は

チェック http://vim.wikia.com/wiki/Search_and_replace ...これは私が達成したかったまさにです

+2

OPは 'sed'で解決策を尋ねました。これはsedではありません。 –

関連する問題