Macos 如何用多行替换word
我看过很多类似的问题和答案,但都遇到了麻烦 我有一个XML文件,其行如下:Macos 如何用多行替换word,macos,sed,awk,Macos,Sed,Awk,我看过很多类似的问题和答案,但都遇到了麻烦 我有一个XML文件,其行如下: <blah:formProperty id="_blah" default="%HTML%"> <style> blah </style> <script> blah </script> 使用sed会引发错误,因为它不喜欢多行 awk似乎是一个更好的选择,但不知道如何完成它 很接近,但我无法让a
<blah:formProperty id="_blah" default="%HTML%">
<style>
blah
</style>
<script>
blah
</script>
使用sed会引发错误,因为它不喜欢多行
awk似乎是一个更好的选择,但不知道如何完成它
很接近,但我无法让awk示例工作。$DATA是如何定义的,以便“echo$DATA”返回多行?很多论坛的话题都是这样的,而且都是这样说的
echo "$DATA"
将打印多行
这是一个由两部分组成的问题。如何解决上述问题?他们是如何让awk的例子起作用的
$DATA是如何定义的,以便“echo$DATA”返回多行
引用你的多行文字。例如:
$ DATA='<style>
blah
</style>
<script>
blah
</script>'
现在,如果您echo
变量,您将得到
$ echo "$DATA"
<style>
blah
</style>
<script>
blah
</script>
awk似乎是一个更好的选择,但不知道如何完成它
现在已经定义了一个变量,您可以通过执行以下操作在awk
中使用该变量:
awk -v var="$DATA" '{sub(/%HTML%/,var)}1' file.xml
现在,您一定想知道,为什么要替换%HTML%
。这是因为有一个特殊的字符&
,它告诉sub
函数生成匹配的文本,在我们的例子中是%HTML%
。为了避免这种情况,你需要逃避它。使用\\
将允许sub
放入文本&
。使用\&
被视为普通的&
,您也不希望这样
$ DATA='\\<style\\>
blah
\\</style\\>
\\<script\\>
blah
\\</script\\>'
更新:
正如OP所说,他在OSX上使用了一个awk
,它不接受带有内嵌换行符的变量,并按照评论中的建议更新答案
awk -v var="${DATA//$'\n'/\\n}" '{sub(/%HTML%/,var)}1' file.xml
$DATA是如何定义的,以便“echo$DATA”返回多行
引用你的多行文字。例如:
$ DATA='<style>
blah
</style>
<script>
blah
</script>'
现在,如果您echo
变量,您将得到
$ echo "$DATA"
<style>
blah
</style>
<script>
blah
</script>
awk似乎是一个更好的选择,但不知道如何完成它
现在已经定义了一个变量,您可以通过执行以下操作在awk
中使用该变量:
awk -v var="$DATA" '{sub(/%HTML%/,var)}1' file.xml
现在,您一定想知道,为什么要替换%HTML%
。这是因为有一个特殊的字符&
,它告诉sub
函数生成匹配的文本,在我们的例子中是%HTML%
。为了避免这种情况,你需要逃避它。使用\\
将允许sub
放入文本&
。使用\&
被视为普通的&
,您也不希望这样
$ DATA='\\<style\\>
blah
\\</style\\>
\\<script\\>
blah
\\</script\\>'
更新:
正如OP所说,他在OSX上使用了一个awk
,它不接受带有内嵌换行符的变量,并按照评论中的建议更新答案
awk -v var="${DATA//$'\n'/\\n}" '{sub(/%HTML%/,var)}1' file.xml
$DATA是如何定义的,以便“echo$DATA”返回多行
引用你的多行文字。例如:
$ DATA='<style>
blah
</style>
<script>
blah
</script>'
现在,如果您echo
变量,您将得到
$ echo "$DATA"
<style>
blah
</style>
<script>
blah
</script>
awk似乎是一个更好的选择,但不知道如何完成它
现在已经定义了一个变量,您可以通过执行以下操作在awk
中使用该变量:
awk -v var="$DATA" '{sub(/%HTML%/,var)}1' file.xml
现在,您一定想知道,为什么要替换%HTML%
。这是因为有一个特殊的字符&
,它告诉sub
函数生成匹配的文本,在我们的例子中是%HTML%
。为了避免这种情况,你需要逃避它。使用\\
将允许sub
放入文本&
。使用\&
被视为普通的&
,您也不希望这样
$ DATA='\\<style\\>
blah
\\</style\\>
\\<script\\>
blah
\\</script\\>'
更新:
正如OP所说,他在OSX上使用了一个awk
,它不接受带有内嵌换行符的变量,并按照评论中的建议更新答案
awk -v var="${DATA//$'\n'/\\n}" '{sub(/%HTML%/,var)}1' file.xml
$DATA是如何定义的,以便“echo$DATA”返回多行
引用你的多行文字。例如:
$ DATA='<style>
blah
</style>
<script>
blah
</script>'
现在,如果您echo
变量,您将得到
$ echo "$DATA"
<style>
blah
</style>
<script>
blah
</script>
awk似乎是一个更好的选择,但不知道如何完成它
现在已经定义了一个变量,您可以通过执行以下操作在awk
中使用该变量:
awk -v var="$DATA" '{sub(/%HTML%/,var)}1' file.xml
现在,您一定想知道,为什么要替换%HTML%
。这是因为有一个特殊的字符&
,它告诉sub
函数生成匹配的文本,在我们的例子中是%HTML%
。为了避免这种情况,你需要逃避它。使用\\
将允许sub
放入文本&
。使用\&
被视为普通的&
,您也不希望这样
$ DATA='\\<style\\>
blah
\\</style\\>
\\<script\\>
blah
\\</script\\>'
更新:
正如OP所说,他在OSX上使用了一个awk
,它不接受带有内嵌换行符的变量,并按照评论中的建议更新答案
awk -v var="${DATA//$'\n'/\\n}" '{sub(/%HTML%/,var)}1' file.xml
如果数据中有多行,则
echo“$DATA”
将打印多行!请尝试DATA=“$(printf“multi\nline\nda\n”)”
您在哪个平台上?并非所有的awk
s都是相同的。我在Mac电脑上。我上面给出的链接有echo$DATA,然后显示了多行输出,但却无法重新创建。@PaulEricson可能是打字错误,因为当您打印不带引号的字符串时,换行符会转换为空格。如果数据中有多行,则echo“$DATA”
将打印多行!请尝试DATA=“$(printf“multi\nline\nda\n”)”
您在哪个平台上?并非所有的awk
s都是相同的。我在Mac电脑上。我上面给出的链接有echo$DATA,然后显示了多行输出,但却无法重新创建。@PaulEricson可能是打字错误,因为当您打印不带引号的字符串时,换行符会转换为空格。如果数据中有多行,则echo“$DATA”
将打印多行!请尝试DATA=“$(printf“multi\nline\nda\n”)”
您在哪个平台上?并非所有的awk
s都是相同的。我在Mac电脑上。我上面给出的链接包含echo$数据,然后显示