我有一个包含名单列表的文件。我正在尝试搜索具有特定字符串组的名称,并将它们打印到shell中的新文件中。你能帮忙吗?
这就是我所看到的。 文本文件(names.txt)包含
之类的名称New York_USA
Delhi
Moscow
Tokyo
Austin_USA
Beijing
Chicago_USA
我试图在单独的文件中使用_USA获取名称。 这是我试过的
#/bin/ksh
for city in "cat names.txt"
do
if ["$city" =~ "*_USA"]
then
echo "$city in USA" > USAnames.txt
fi
done
答案 0 :(得分:0)
您只需要执行cat
命令而不是引用它,修复您的测试运算符([ - > [[),并附加>>而不是覆盖>,并写一个正则表达式而不是一个glob模式:
#/bin/ksh
for city in `cat names.txt` # notice the back quotes
do
if [[ "$city" =~ .*_USA ]]
then
echo "$city in USA" >> USAnames.txt
fi
done
更惯用的方式可能是:
#/bin/ksh
while read city
do
if [[ "$city" =~ .*_USA ]]
then
echo "$city in USA" >> USAnames.txt
fi
done < names.txt
答案 1 :(得分:0)
使用awk
或sed
会更容易
如果你想让输出像这样
New York_USA in USA
Austin_USA in USA
Chicago_USA in USA
使用
awk '/_USA$/ {print $0, "in USA"}' names.txt > USAnames.txt
或sed
sed -n 's/\(.*\)_USA$/\0 in USA/p' names.txt > USAnames.txt
或者如果您想要输出
New York in USA
Austin in USA
Chicago in USA
使用
awk -F_ '/_USA$/ {print $1,"in USA"}' names.txt > USAnames.txt
或sed
sed -n 's/\(.*\)_USA$/\1 in USA/p' names.txt > USAnames.txt
修改强>
您也可以使用perl打印出美国城市
#!/usr/bin/env perl
open(NAMES, "names.txt");
while (<NAMES>) {
chomp;
print "$_ in USA\n" if /_USA$/; # Chicago_USA in USA
# print "$1 in USA\n" if /(.*)_USA$/; # Chicago in USA
}
close(NAMES);
答案 2 :(得分:0)
只需使用grep:
grep '_USA$' your_file> new_file