对于带引号的字符串,sed 无法按预期工作

对于带引号的字符串,sed 无法按预期工作

我需要将 's3_bucket': 'pass' 更改为 hello 但它不起作用

例如: echo "'s3_bucket': 'pass'" | sed 's/'s3_bucket':/hello/' 输出:
's3_bucket':'pass'

请帮助理解我做错了什么

答案1

引用是错误的。该部分's/'s3_bucket':/hello/'由 shell 解释为's/'后跟s3_bucket':/hello/',结果s/s3_bucket:/hello/作为 的参数sed

尝试

echo "'s3_bucket': 'pass'" | sed "s/'s3_bucket':/hello/"

或者

echo "'s3_bucket': 'pass'" | sed 's/'\''s3_bucket'\'':/hello/'

请注意,在第二个版本中, 中有两个相邻的单引号'\'',而不是双引号。

还有更多可能的引用方式,请参阅这个类似问题的答案

相关内容