使用Shell脚本如何在文本文件中添加空行?

8

这是我的代码;“test.txt”文件除了制表符外还包含更多的空行和空格。我想要去掉这些空格和空行,但我需要在开始st^之前留下一个空行。如何做到?

sed "s/^[ ]*//" -i  test.txt
cat $2 > /tmp/tt.txt
sed '/^$/d' test.txt > /tmp/tt.txt
echo " " >> test.txt
echo " " >>  /tmp/tt.txt
mv /tmp/tt.txt  test.txt

我得到的输出如下:
    st^flower
     p^rose
     p^jasmine
    st^animals 
     p^bear
     p^elephant

我希望得到如下输出:
    st^flower
     p^rose
     p^jasmine

    st^animals 
     p^bear
     p^elephant

输入是HTML文件,我正在将其拆分并生成文本文件,如下所示: st^花 p^玫瑰 p^茉莉 st^动物 p^熊 p^大象 - user2653831
为了使示例完整,它需要样本数据,即“test.txt”的样本内容。 - outis
3个回答

30

To output empty line use this:

echo -en '\n'

e - 解释 \n

n - 不在末尾输出空行,避免出现双倍空行的混乱

使用单引号会防止shell将字符解释为行结束符。


1
\n 对我不起作用..还有其他方法在文本文件中添加空行吗? - user2653831
1
感谢您指出需要使用单引号的问题。解决了我的问题。 - Isaac Gregson

3
echo -e "\n"

加上双引号,它就能正常工作


它在每一行都给出了空格,但我只想在st之前有空格。 - user2653831

0
我已经阅读了您的评论“它给每一行都留出空间,但我只想在st^之前留出空格。”因此,您可以使用以下代码在st^之前插入新行:
$cat /tmp/tt.txt | sed 's/^st\^/\n\0/g'

例如:

$ echo '
st^flower
 p^rose
 p^jasmine
 st^animals 
 p^bear
 p^elephant' | sed 's/^st\^/\n\0/g' 

对我来说运行良好。


1
避免无用的cat使用 - tripleee
是的,谢谢。"Cat" 创建了一个进程。正确的脚本:$ sed 's/^st^/\n\0/g' /tmp/tt.txt - akozin
谢谢,但我不想在那之前加上 st^flower,因为它会产生一个空行。 - user2653831

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接