论坛上的人们给了我很大的帮助!非常感谢!
这是我的字符串
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/