首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据特定字符串将单个文件分离为不同的文件

根据特定字符串将单个文件分离为不同的文件
EN

Unix & Linux用户
提问于 2018-04-05 08:45:20
回答 1查看 45关注 0票数 -1

我有一个包含以下条目的文件

代码语言:javascript
复制
vdomain
v2host
v3server
v1adapter
vhost
v2domain
v1application

我想将所有这些条目分成4个不同的文件,如

file1 :应该包含以"v“开头的名称

代码语言:javascript
复制
vdomain
vhost

file2 :应该包含以"v1“开头的名称

代码语言:javascript
复制
v1application
v1adapter

file3 :应该包含以"v2“开头的名称

代码语言:javascript
复制
v2host
v2domain

file4 :应该包含以"V3“开头的名称

代码语言:javascript
复制
v3server
EN

回答 1

Unix & Linux用户

发布于 2018-04-05 08:59:20

使用awk

代码语言:javascript
复制
awk '/^v[^123]/ { print >"file1" }
     /^v1/ { print >"file2" }
     /^v2/ { print >"file3" }
     /^v3/ { print >"file4" }' inputfile

这将创建您的四个文件。

第一个正则表达式只匹配以v开头的行,而不是后面的数字1、2或3(因为这些行将放在其他文件中)。不匹配任何正则表达式的行将被丢弃。

sed的等效之处是:

代码语言:javascript
复制
sed -n \
    -e '/^v[^123]/w file1' \
    -e '/^v1/w file2' \
    -e '/^v2/w file3' \
    -e '/^v3/w file4' inputfile

w命令在sed中将当前行写入指定文件。

并使用shell循环(您实际上不想使用这个):

代码语言:javascript
复制
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使用的脚本相同,这并不令人惊讶:

代码语言:javascript
复制
cat <
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/435695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档