sedを使用して2番目のパターン発生位置に行を挿入する

sedを使用して2番目のパターン発生位置に行を挿入する

次の2つのコマンドラインセットがあります。

make PREFIX=/usr                \
SHAREDIR=/usr/share/hwdata \
SHARED=yes
make PREFIX=/usr                \
SHAREDIR=/usr/share/hwdata \
SHARED=yes                 \
install install-lib

2行目の前に行を挿入したいですmake PREFIX=/usr

私が試したことは次のとおりです。

sed -e "/make PREFIX=\/usr/i\  sed -e '/\\\\\$(DIRINSTALL) -m 755 \\\\\$(DESTDIR)\\\\\$(SBINDIR)/ s/^/#/' \\\\\n\      -e '/\\\\\$(DIRINSTALL) -m 755 \\\\\$(DESTDIR)\\\\\$(LIBDIR)/ s/^/#/' \\\\\n\      -e 's/pci \\\\\$(DESTDIR)\\\\\$(PKGCFDIR)/pci/' \\\\\n\      -i Makefile" \
 >> $Output

$Outputスクリプトファイルの名前です。

正しいsedコマンド(以下を参照)を生成しますが(一部の\ 'は表示から失われます)、もちろん2つのモードの上に行を配置します。上記のさまざまな改善を試しましたが、成功しませんでした。 2番目のアイテムの上にどのように挿入しますか?申し訳ありません。 Google ではまだ情報を提供していません。私はこれをBashスクリプトで書いているので、sedやawkを適用するのが最も簡単です。私はPerlを理解していないので、それを使用したくありません。

これが私が挿入したい行です。 Bashスクリプトでは、次のように表示する必要があります。

sed   -e '/\$(DIRINSTALL) -m 755 \$(DESTDIR)\$(SBINDIR)/ s/^/#/' \
      -e '/\$(DIRINSTALL) -m 755 \$(DESTDIR)\$(LIBDIR)/ s/^/#/' \
      -e 's/pci \$(DESTDIR)\$(PKGCFDIR)/pci/' \
      -i Makefile

ベストアンサー1

これはうまくいきます...最初の発生をスキップします。

sed -i -E '0,/make PREFIX/! s/(make PREFIX)/\n\1/' file.txt

ファイル.txt

make PREFIX=/usr
SHAREDIR=/usr/share/hwdata
SHARED=yes
make PREFIX=/usr
SHAREDIR=/usr/share/hwdata
SHARED=yes
install install-lib

おすすめ記事