Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Linux Bash-在以句点开头的行上方添加空行_Linux_Bash - Fatal编程技术网

Linux Bash-在以句点开头的行上方添加空行

Linux Bash-在以句点开头的行上方添加空行,linux,bash,Linux,Bash,我需要编辑一个文本文件,在每行上方添加一个以句点开头的空行 以前 Corn .Apple Words. .Orange Bean 之后 这是我到目前为止所拥有的。 这会在每个句点后添加空格。实际文件中还有更多 cat File.txt | sed -r 's/([.]+)/\n\1/g' 这将显示以句点开头的行 while read -r line; do if [[ "$line" == "."* ]]; then echo "$line" fi done < File.tx

我需要编辑一个文本文件,在每行上方添加一个以句点开头的空行

以前

Corn
.Apple
Words.
.Orange
Bean
之后

这是我到目前为止所拥有的。 这会在每个句点后添加空格。实际文件中还有更多

cat File.txt | sed -r 's/([.]+)/\n\1/g'
这将显示以句点开头的行

while read -r line; do

if [[ "$line" == "."* ]]; then

echo "$line"

fi

done < File.txt
读取-r行时
;做
如果[[“$line”==”*];然后
回音“$line”
fi
完成

如何将它们合并在一起?

我认为awk脚本将是最有效的

/^\./ {print "";}
{print $0;}

在本例中,将其放入一个名为“awkfile”的文件中,并像“awk-f awkfile.txt”一样运行它。

这将生成您想要的输出:

$ sed 's/^[.]/\n./' file
Corn

.Apple
Words.

.Orange
Bean
如果要就地更改文件,请使用sed的
-i
选项:

sed -i 's/^[.]/\n./' file
对于Mac OSX或其他BSD系统,请使用:

sed -i '' 's/^[.]/\n./' file
我们使用只在行首匹配的
^
。因为我们在行首匹配一个句点,所以不必用括号捕捉一个组:我们知道匹配是一个句点。我们需要做的就是在这段时间之前添加一个换行符。

使用sed

sed 's/^\./\n\./'
带着awk

awk '/^\./{print ""} 1'


使用RegExp可以是:

cat File.txt | sed -r 's/^(\..+)/\n\1/g'
此命令行指示
sed(1)
搜索以点开头的行,然后在其前面插入空行。查看
sed(1)
手册页面,了解如何使用
i
nsert、
r
eplace和
a
ppend命令

awk 'sub(/^\./,"\n.") 1'
cat File.txt | sed -r 's/^(\..+)/\n\1/g'
$ sed -e '/^\./i\\' pru.txt  
Corn

.Apple
Words.

.Orange
Bean