如何在现有的txt文件中添加新行

时间:2014-07-04 21:00:47

标签: bash awk sed grep

我是bash脚本的新手。我有一个txt文件(称之为geom.txt),我正在使用它,如下所示:

2
C -0.6165934086165 -0.35599823933468 0.00000000 0.8466
C 0.6165934086165 0.35599823933468 0.00000000 0.8466
lattice_vector 2.46670923 0.00000000 0.00000000
lattice_vector 1.23286602 2.13599798 0.00000000
lattice_vector 0.00000000 0.00000000 40

我想编写一个脚本,在第1行和第2行之间添加一行,以产生如下输出:

2

C -0.6165934086165 -0.35599823933468 0.00000000 0.8466
C 0.6165934086165 0.35599823933468 0.00000000 0.8466
lattice_vector 2.46670923 0.00000000 0.00000000
lattice_vector 1.23286602 2.13599798 0.00000000
lattice_vector 0.00000000 0.00000000 40

此外,我想使这个一般,以便前一个表单的任何输入文件将在第1行和第2行之间添加一个空行。我知道这是基本的,但我需要帮助!谢谢!

3 个答案:

答案 0 :(得分:4)

使用gnu sed

sed -i.bak '2s/^/\n/' file

使用awk

awk 'NR==2{print "\n" $0; next}1' file

使用non-gnu sed

sed -i.bak $'2s/^/\\\n/' file

或者其他:

eol=$'\n'
sed -i.bak "2s/^/\\$eol/" file

最后这里是纯粹的BASH方式:

c=0
while IFS= read -r line; do
    (( c++ == 1 )) && echo
    echo "$line"
done < file

答案 1 :(得分:0)

或者您可以在简单的while循环中执行此操作:

let count=0   # set a simple integer to test
:> tmpfile    # create or truncate tmpfile

while read line || test -n "$line"; do
    echo "$line" >> tmpfile   # write each line to tmpfile
    # if this is the first line, add a newline and increment counter
    test "$count" -eq 0 && echo "" >> tmpfile && ((count+=1))
done <"$1"

# when all lines written to tmpfile copy tmpfile to filename given as arg, remove tmpfile
cp tmpfile "$1" && rm -f tmpfile

答案 2 :(得分:0)

您可以使用vim来实现目标。

vim -c 1 -c "normal o" -c wq geom.txt