我有一个包含以下条目的文件
vdomain
v2host
v3server
v1adapter
vhost
v2domain
v1application我想将所有这些条目分成4个不同的文件,如
file1 :应该包含以"v“开头的名称
vdomain
vhostfile2 :应该包含以"v1“开头的名称
v1application
v1adapterfile3 :应该包含以"v2“开头的名称
v2host
v2domainfile4 :应该包含以"V3“开头的名称
v3server发布于 2018-04-05 08:59:20
使用awk:
awk '/^v[^123]/ { print >"file1" }
/^v1/ { print >"file2" }
/^v2/ { print >"file3" }
/^v3/ { print >"file4" }' inputfile这将创建您的四个文件。
第一个正则表达式只匹配以v开头的行,而不是后面的数字1、2或3(因为这些行将放在其他文件中)。不匹配任何正则表达式的行将被丢弃。
sed的等效之处是:
sed -n \
-e '/^v[^123]/w file1' \
-e '/^v1/w file2' \
-e '/^v2/w file3' \
-e '/^v3/w file4' inputfilew命令在sed中将当前行写入指定文件。
并使用shell循环(您实际上不想使用这个):
rm -f file[1234]
while read -r words; do
case "$words" in
v1*) printf '%s\n' "$words" >>file2 ;;
v2*) printf '%s\n' "$words" >>file3 ;;
v3*) printf '%s\n' "$words" >>file4 ;;
v*) printf '%s\n' "$words" >>file1 ;;
esac
done 这几乎是一样的,除了每个输入行之后的空白将被删除,初始的空白空间也会被忽略和删除。在这里,测试的顺序也很重要。
最后,使用ed时,使用的脚本与sed使用的脚本相同,这并不令人惊讶:
cat <https://unix.stackexchange.com/questions/435695
复制相似问题