linux sed replace提供输入插入符号而不是结果[重复]

htrmnn0y  于 2023-01-20  发布在  Linux
关注(0)|答案(1)|浏览(130)
    • 此问题在此处已有答案**:

(9个答案)
11小时前关门了。
我想把一个未知的哈希值转换成一个已知的哈希值。需要很多的转义...
要替换的行的示例:

define( 'PB_PASSWORD', 'ab57a5449b0781c91c4701ab6258655d' );

目标可能是:

define( 'PB_PASSWORD', '438bb1dc13ec5cbdf3b938e4fc6c3748' );

这应该在一个Linux shell脚本中完成。我使用sed已经做到了这一步:

sed -i 's/define\( \'PB_PASSWORD\', \'[^“]*\' \);/define\( \'PB_PASSWORD\', \'438bb1dc13ec5cbdf3b938e4fc6c3748\' \);/' todo.txt

但这只是给了我一个输入

>

我尝试了几种方法来实现这一点,我认为这是逃避,使我无法达到我的目标。
我哪里做错了?

7rfyedvj

7rfyedvj1#

您可以使用

sed "s/\(define( 'PB_PASSWORD', '\)[^']*/\1438bb1dc13ec5cbdf3b938e4fc6c3748/"

请参见online demo
这里使用的是POSIX BRE模式:

  • \(define( 'PB_PASSWORD', '\)-第1组(\1是指来自RHS的该值):文字define( 'PB_PASSWORD', '文本
  • [^']*-除'之外的任何零个或多个字符。

注意,在\1后面使用一个数字是可以的,因为在POSIX正则表达式风格中最多只能定义9个组反向引用。
在您的环境中,您可以使用

sed -i "s/\(define( 'PB_PASSWORD', '\)[^']*/\1438bb1dc13ec5cbdf3b938e4fc6c3748/" todo.txt

相关问题