我正在尝试使用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"
这里的问题是我正在尝试使用IFS
和read
命令逐行遍历我的文件,同时在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}"/>
值提取到一个变量,我将最终附加到另一个文件
答案 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")