sed:セクションの末尾の前にテキストを挿入する

sed:セクションの末尾の前にテキストを挿入する

セクションが終了する前に、HTMLファイルにいくつかのテキストを挿入する必要がありますHEAD

私の考えでは:

sed -i "s#</head>#<style> @page { prince-shrink-to-fit: auto }
.repository-with-sidebar.with-full-navigation .repository-content 
{width: 950px ! important;} </style>\n</head>#" ${1}"/"${2}"/"${i}.html

エラーが発生します。

sed: 1: command a expects \ followed by text

私は間違いを見ませんでした。スタイルの周りに一重引用符を試してみました。

セクションが終わる前に挿入したい正確なテキストは次のHEADとおりです。

<style>
@page { prince-shrink-to-fit: auto }
.repository-with-sidebar.with-full-navigation .repository-content 
{width: 950px ! important;}
</style>

編集:これは正しいコマンドです:

sed -i "s#</head>#<style> @page { prince-shrink-to-fit: auto } .repository-with-sidebar.with-full-navigation .repository-content {width: 950px ! important;} </style>\n</head>#" ${1}"/"${2}"/"${i}.html

編集2:コマンドの形式が正しいことを確認するために、以下も試しています。

strToInsert='<style> @page { prince-shrink-to-fit: auto } .repository-with-sidebar.with-full-navigation .repository-content {width: 950px ! important;} </style>'

sed -i "s#</head>#$strToInsert\n</head>#" ${1}"/"${2}"/"${i}.html

これにより、私が挿入したテキストに問題がある可能性があることに気づきました。

ベストアンサー1

内部プロセスsed中にバックアップファイルを作成する必要があります。これ-iAppleのオプションにはsed拡張パラメータが必要です。(生成されたバックアップファイルの場合)次のパラメータを使用します。これは#s</head>#...、拡張子が ""であるバックアップファイルを作成することを意味します。

エラーは、あなたが参照していると思うことを意味します。a一時停止コマンド。私の推測値$1a-iateの前の引数は、sedこれが変更されるファイルのパスではなく実行されるスクリプトだと思うので、適切なエラーが発生します。これはまさにApplesedと間違ったコマンドでa発生するエラーです。

$ sed a
sed: 1: "a": command a expects \ followed by text

-iコマンドに拡張パラメーターを指定してくださいsed

sed -i.bak "s#</head>#<style> @page { prince-shrink-to-fit: auto } .repository-with-sidebar.with-full-navigation .repository-content {width: 50px ! important;} </style>\n</head>#" "${1}/${2}/${i}.html"

これにより、すべてが機能します(ただし、\n改行エスケープではありません)。一重引用符を使用している場合は、「」内のスペースを削除することもできます!important

sed上記のコードはGNUでも動作しますが、注意してください。-iPOSIX オプションではありません。そして、一般的に持ち運びが簡単ではありません。

とにかく、内部修正を使用せずに明示的にファイルコピーを直接処理することをお勧めします。しかし、それはあなた次第です。


${1}変数の拡張などを引用する必要があります。スラッシュは常にリテラルなので、単に引用することは意味がありません。

おすすめ記事