gsed macOSX就地字符串逐行替换

时间:2017-11-03 16:40:39

标签: bash shell unix

我正在尝试使用gsed命令通过传入字符串作为参数来逐行替换字符串。这是我的一个例子:

while IFS='' read -r line || [[ -n "$line" ]]; do
  if [[ $line != *'{'* ]] && [[ $line == *"property"* ]]; then
    $line | gsed -r '/name="property"/{s@(.*value=")([^"]*)(".*)@\1$R{\2.LABEL}\3@g;}'
   property_value=$(grep -oE '{[^/]+}' | cut -c2- | rev | cut -c2- | rev)
  fi
done < "$file2"

这里的问题是我正在尝试使用IFSread命令逐行遍历我的文件,同时在gsed内执行while loop

问题在于,如果传入文件名,gsed倾向于读取整个文件,但我只想使用gsed对字符串进行就地替换我进入了它。

我需要逐行执行此操作的原因是因为我需要保存$property_value变量,如果它在{{1}内符合if条件,我将稍后将其附加到另一个文件循环。

总结一下,如果符合while条件语句,我想格式化文件中的字符串,将此字符串中的if保存到变量并将其附加到另一个文件。也许我接近这个的方式并不是最好的,但如果有其他技巧可以做到这一点,我愿意接受建议。

以下是一些示例输入:

property value

运行gsed命令后,我想在我的文件中执行一个就地字符串替换,以这种格式匹配这个属性:

<property name="property" value="EXAMPLE"/>

最后我使用grep命令,我想将<property name="property" value="$R{EXAMPLE.LABEL}"/> 值提取到一个变量,我将最终附加到另一个文件

1 个答案:

答案 0 :(得分:0)

而不是

 $line | gsed -r '/name="property"/{s@(.*value=")([^"]*)(".*)@\1$R{\2.LABEL}\3@g;}'

line=$(gsed -r '/name="property"/{s@(.*value=")([^"]*)(".*)@\1$R{\2.LABEL}\3@g;}' <<<"$line")