Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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 在最后一个空行之后插入Shell行 我试图在文件中间的最后一个空行之后插入一行文本。 示例文件:_Bash_Shell_Insert_Sed - Fatal编程技术网

Bash 在最后一个空行之后插入Shell行 我试图在文件中间的最后一个空行之后插入一行文本。 示例文件:

Bash 在最后一个空行之后插入Shell行 我试图在文件中间的最后一个空行之后插入一行文本。 示例文件:,bash,shell,insert,sed,Bash,Shell,Insert,Sed,插入的文本应位于该文件的第6行。到目前为止,我尝试过这样的命令: sed '/\n/ i some text' file 但是,到目前为止,一切都不起作用。有什么想法吗?谢谢。使用grep和awk的不同解决方案: awk -v last_empty_line=$(grep -nE '^[[:blank:]]*$' your_file | tail -1 | cut -c 1) '{print; if (NR==last_empty_line) print "->some new text

插入的文本应位于该文件的第6行。到目前为止,我尝试过这样的命令:

sed '/\n/ i some text' file

但是,到目前为止,一切都不起作用。有什么想法吗?谢谢。

使用grep和awk的不同解决方案:

awk -v last_empty_line=$(grep -nE '^[[:blank:]]*$' your_file | tail -1 | cut -c 1) '{print; if (NR==last_empty_line) print "->some new text here"}' your_file

awk在最后一个空行后插入新文本;最后一个空行的索引由一个合适的grep选择,该grep查找空行(或仅填充空白字符),并通过管道连接到尾部以选择最后一个。

使用grep和awk的不同解决方案:

awk -v last_empty_line=$(grep -nE '^[[:blank:]]*$' your_file | tail -1 | cut -c 1) '{print; if (NR==last_empty_line) print "->some new text here"}' your_file
awk在最后一个空行后插入新文本;最后一个空行的索引是用合适的grep选择的,grep会找到空行(或只填充空白字符),然后通过管道插入尾部来选择最后一个。

这可能会有所帮助

perl -p00e 'eof&&s/^/-- new text --\n\n/' text.txt
也许这会有帮助

perl -p00e 'eof&&s/^/-- new text --\n\n/' text.txt
这可能适用于您(GNU-sed):

这可能适用于您(GNU-sed):


你是什么意思:<文件>代码>中间的最后一个换行符?你能发布你的样本文件吗?你是什么意思:<文件>代码中的最后一行?你能发布你的示例文件吗?非常好,两次浏览文件是解决这个奇怪问题的最简单方法。这种简化怎么样:
index=$(grep-ne'^$'| tail-n1);sed$index的/*/yourline\n&/'。(请注意,我删除了
cut-c1
,这会使您的行出错)grep中的regexp考虑到非空行更为复杂;所以你当然可以省略这个。我在cygwin上测试它,我的grep-n输出行号,后跟一列。我想快速切割,但我弄错了:(.让我们将其导入sed或grep以删除它。但是,您的解决方案更优雅,我不知道您是否可以在这样的特定行上应用sed命令。因此,对于您的最终解决方案为+1。我的awk-n还输出后跟冒号的数字。因此,他的是对的,而您的是错的。需要使用cut命令。更好的方法:
index=$(grep-ne'^$'$nFile | tail-n1 | sed“s/:/”)sed-i$index“i$End_Text”$nFile;
非常好,两次遍历文件的想法是解决这个奇怪问题的最简单方法。这种简化方法是什么:
index=$(grep-ne'^$'| tail-n1);sed$index的/*/yourline\n&/;
。(请注意,我删除了
cut-c1
,这会使您的行出错)grep中的regexp更复杂,需要考虑空白的非空行;因此您当然可以忽略这一点。我在cygwin上测试它,我的grep-n输出行号,后跟一列。我想快速剪切它,但我弄错了:(.让我们将其导入sed或grep以删除它。但是,您的解决方案更优雅,我不知道您是否可以在这样的特定行上应用sed命令。因此,对于您的最终解决方案为+1。我的awk-n还输出后跟冒号的数字。因此,他的是对的,而您的是错的。需要使用cut命令。更好的方法:
index=$(grep-ne'^$'$nFile | tail-n1 | sed“s/:/”)sed-i$index“i$End_Text”$nFile;