SED 将 \n 和 \ 变为空

SED 将 \n 和 \ 变为空

论坛上的人们给了我很大的帮助!非常感谢!

这是我的字符串

UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAx\nNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKt\na11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1\/zz\/

我正在尝试从上面的字符串中删除 \n 和 \。

我试过了:

tr ‘\n\r\\’ ‘   ‘

sed 's/\n//g;s;\\;;g'

还有一些其他变体,但我没能成功去除所有内容。我可以得到 \,但不能得到 n。

有人看到我的错误吗?

答案1

尝试:

sed 's/\\n//g;s/\\//g'

您想要删除一个文字,\后面跟着一个文字n。因此,必须在第一次替换中对反斜杠进行转义。相比之下,s/\n//g将删除换行符。

答案2

使用它来tr删除(-d)所有\n\

tr -d '\\n\\' 

测试:

echo 'foo\nbar\foo' | tr -d '\\n\\'

输出:

foobarfoo

答案3

你可以简单地这样做。你不需要再做其他替换。

sed 's/\\n\|\\//g'

或者

sed 's~\\n\|\\~~g'

例子:

$ var='UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAx\nNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKt\na11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1\/zz\/'
$ sed 's/\\n\|\\//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/

解释:

sed 的语法:

sed 's/pattern/replace/modifier' file

命令:

为了清楚起见,将上述 sed 命令拆分如下。

sed 's/\\n\|\\//g'
  • s- 搜索和替换。
  • \\n\|\\- 模式 .\\n匹配文字\n\|匹配文字\. 因此,它首先匹配\n输入字符串中的所有内容,然后匹配\
  • //我们有一个空替换部分,这意味着删除所有匹配的字符或用空字符串替换匹配的字符。
  • g- 全局修饰符。它使匹配在全局范围内发生。即,如果\一行中有两个或多个符号,则sed 's/\\//' file 只会删除每行的第一个符号\。但全局修饰符g会强制sed匹配所有现有\符号。

通过 GNU sed,

$ sed -r 's/\\n|\\//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/

通过 Perl,

$ perl -pe 's/\\n?//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/

相关内容