Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在一个文件中写入多个sed命令?_Bash_Sed - Fatal编程技术网

Bash 如何在一个文件中写入多个sed命令?

Bash 如何在一个文件中写入多个sed命令?,bash,sed,Bash,Sed,我想使用sed命令/^$d删除文件中的空行,然后在文件末尾添加一行。因此,当我尝试在命令文件中执行此操作时 /^$/d \ $ a \ My color is blue 然后执行我得到的错误是:在第一行的命令之后有额外的字符。我了解到您在结束一行命令时使用“\”为什么将其作为额外字符读取???您的错误是第一行末尾的continuation\字符 您需要在第二行(对于a命令)使用它来为a命令添加一些内容,但第一个命令在看到行的末尾时就完成了。继续这一行,您会混淆sed,因为它认为命令是同时运行的

我想使用sed命令
/^$d
删除文件中的空行,然后在文件末尾添加一行。因此,当我尝试在命令文件中执行此操作时

/^$/d \
$ a \
My color is blue

然后执行我得到的错误是:在第一行的命令之后有额外的字符。我了解到您在结束一行命令时使用“\”为什么将其作为额外字符读取???

您的错误是第一行末尾的continuation\字符

您需要在第二行(对于
a
命令)使用它来为
a
命令添加一些内容,但第一个命令在看到行的末尾时就完成了。继续这一行,您会混淆sed,因为它认为命令是同时运行的。

补充有用的答案:

  • 将完整的
    sed
    命令放在单独的行上总是可以的
  • 相反,如果换行符是单个命令的一部分(如本例中的
    a
    函数调用),则必须
    \
    -对其进行转义

    • 如果您愿意尝试,这里有一个
      awk
      解决方案:

      awk 'NF; END {print "new line"}' file
      
      NF
      仅当行中有一些字段(即有数据)时才为真。

      END{print“new line”}
      这会在文件末尾添加一行。

      不要继续第一行。
      \
      仅在模式(
      s//
      /,/
      )中用作新行分隔符,或追加、插入(
      a\
      i\
      [无尾随空格])及其后面的行