【问题标题】:Sed replace string with multi-linessed 用多行替换字符串
【发布时间】:2016-01-07 15:06:41
【问题描述】:

我有简单的 sed 命令:

#!/bin/bash
COMMAND=$1
sed -e "s#COMMAND#$COMMAND#

command 的值应该是每个命令的新行,但我不知道如何将它们提供给 sed 和 sed 将每个命令放在新行上。我试过的是:

 ./script 'ls\n date\n uname\n'

问候!

【问题讨论】:

  • 我正在尝试在 $1 中插入新行并用 sed 捕捉新行。
  • 我不太明白。您想将一串以空格分隔的命令作为脚本的参数并将它们分别输出到新行吗?或者将它们通过sed line-wise 管道来做什么?请给我们输入和预期输出好吗?
  • 你的脚本有点适合我。但是您的 sed 命令不完整。缺少报价,您没有输入。
  • 将 Q 编辑为 sed cmd 所需的输出。祝你好运。

标签: regex sed editor text-editor


【解决方案1】:

如果我理解您的问题,您希望将字符串中的换行符(即反斜杠字符,后跟“n”)替换为实际打印的换行符。

以下脚本采用包含文字“\n”的单引号字符串(如您的问题中所示的输入)并将其转换为实际的新行。

#!/bin/bash
echo -n $1 | sed -e 's#\\n#\n#g'

示例用法:

[user@localhost ~]$ ./simple_sed.sh 'ls\ndate\nuname\n' 
ls
date
uname

您的脚本所需的更改是

    1. echo 参数,否则 sed 需要一个文件并且什么也不做;
    1. 匹配 \\n 并将其替换为换行符;和
    1. 在末尾添加一个“g”,这将在发生替换后继续在一行内搜索(阅读:在一行中替换多个 \n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多