找到一个有前导空格的字符串,并在其正下方添加一行



创建如下文件:

# Start OF Java_Out_Of_Memory
- displayName: "Java_Out_Of_Memory"
logDirectory: "/opt/xyz"
logName: "TextLog_*"
searchStrings:
- displayName: "Out_Of_Memory"
pattern: "java.lang.OutOfMemoryError"
matchExactString: false
caseSensitive: false 
# End OF Java_Out_Of_Memory

我想在caseSensitive: false下面添加一行printMatchesString: false…

# Start OF Java_Out_Of_Memory
- displayName: "Java_Out_Of_Memory"
logDirectory: "/opt/xyz"
logName: "TextLog_*"
searchStrings:
#displayName Should be unique across the patterns including the case.
- displayName: "Out_Of_Memory"
pattern: "java.lang.OutOfMemoryError"
matchExactString: false
caseSensitive: false  
printMatchedString: false
# End OF Java_Out_Of_Memory

我不知道匹配的字符串有多少空格…前导空格可能因文件而异。

I tried this

sed -i '/^[^#]*caseSensitive:*/a \         printMatchedString: false'

所以我的要求是在下面加一行,甚至考虑行距

注意:-我有以上多配置,我需要在每个配置上添加PrinitMatched字符串

试试这个:

sed -E '/^[^#]*caseSensitive:/ {p; s/^([[:blank:]]*)[^[:blank:]].*$/1printMatchesString: false/;}' myfile.txt

解释:

  • /^[^#]*caseSensitive:/-匹配"大小写敏感:"(前面没有"#">
  • )
  • {-执行以下命令块
  • p-打印当前行(以其原始形式)
  • s/^([[:blank:]]*)[^[:blank:]].*$/1printMatchesString: false/-将行解析为一堆空白(在双亲中,所以它是一个捕获组),然后剩下的是什么,并将其替换为空白(1回忆捕获组)和"printMatchesString: false"请注意,结果将自动打印。
  • }-标记命令组的结束

最新更新