26

boots構成ファイルで指定されたパッケージのすべての参照を置き換えようとしています。

行の形式はadd fast (package OR pkg) boots-(any-other-text)次のとおりです。例:

add fast package boots-2.3
add fast pkg boots-4.5

私はそれを次のものに置き換えたい:

add yinst pkg boots-5.0

sed次のコマンドを試しました。

sed -e 's/add fast (pkg\|package) boots-.*/add yinst pkg boots-5.0/g'
sed -e 's/add fast [pkg\|package] boots-.*/add yinst pkg boots-5.0/g'

正しい正規表現は何ですか?packageブール値または(またはpkg)部分に何かが欠けていると思います。

4

4 に答える 4

32
sed -e 's/add fast \(pkg\|package\) boots-.*/add yinst pkg boots-5.0/g'

ORを2回行うことで、常にORを回避できます

sed 's/add fast pkg boots-.*/add yinst pkg boots-5.0/g
s/add fast package boots-.*/add yinst pkg boots-5.0/g'
于 2013-02-11T13:45:33.173 に答える
26

拡張正規表現モードを使用し、. をエスケープしないでください|

sed -E -e 's/add fast (pkg|package) boots-.*/add yinst pkg boots-5.0/g'
于 2013-02-11T13:46:07.363 に答える
8

BRE と ERE を混在させている場合は、両方()をエスケープするか、|またはまったくエスケープしません。

sed はデフォルトで基本的な正規表現を使用します。拡張正規表現の使用を有効にするかどうかは実装に依存します。たとえば、BSD sed では-Eスイッチを使用しますが、GNU sed では として文書化されていますが-r、同様に-E機能します。

于 2013-02-11T13:44:40.267 に答える