我有一个带有缩进的文件。
我想替换特定行但保留缩进。
该文件有一行如
\t\t customerId = "123" // has indentation in the start of line
我正在运行这个:
sed -e 's:^\s*customerId = "'${OLD_ID}'": customerId = "'${NEW_ID}':' file
这没有任何作用。我也知道,即使它有效,我也会弄乱缩进。我怎样才能解决这个问题?
注意:解决方案不一定是,sed
但我希望它能够跨平台
更新
测试@Gilles Quenot 答案:
OLD_ID="1234"
NEW_ID="5678"
sed -E -i.bk "s:^(\s*)versionName = \"$OLD_ID\":\1versionName = \"$NEW_ID\":" testfile
样品测试:
name="Jim"
customerId = "1234"
号码未被替换
使用标准
sed
:该
[:blank:]
模式将匹配单个空格或制表符。该
sed
表达式捕获行中的所有内容,直到 ID 本身,并将其替换为捕获的内容和新 ID。稍微好看点,可能
测试:
如果周围的空格
=
是可选的,您可能需要使用don_crissti 在评论中建议的另一种方法:
这样做的好处是它不需要捕获组。这将查找包含单词
customerId
后跟等号的行并替换这些行上的 ID。