在shell中的文件中搜索字符串的一部分
我有一个文件,里面有一张名单。我试图搜索带有特定字符串组的名称,并将它们打印到shell中的新文件中。你能帮忙吗 这是我正在看的。 文本文件(names.txt)包含如下名称在shell中的文件中搜索字符串的一部分,shell,ksh,Shell,Ksh,我有一个文件,里面有一张名单。我试图搜索带有特定字符串组的名称,并将它们打印到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"] t
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
您只需要执行
cat
命令而不是引用它,修复测试运算符([-->[[]),追加>>而不是覆盖>,并编写正则表达式而不是全局模式:
#/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
#/bin/ksh
读城市
做
如果[[“$city”=~.*U USA]]
然后
echo“$city in USA”>>USAnames.txt
fi
done
使用awk
或sed
会更容易
如果您希望输出如下所示
New York_USA in USA
Austin_USA in USA
Chicago_USA in USA
使用
或sed
sed -n 's/\(.*\)_USA$/\0 in USA/p' names.txt > USAnames.txt
sed -n 's/\(.*\)_USA$/\1 in USA/p' names.txt > USAnames.txt
或者,如果您希望输出是
New York in USA
Austin in USA
Chicago in USA
使用
或sed
sed -n 's/\(.*\)_USA$/\0 in USA/p' names.txt > USAnames.txt
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);
!/usr/bin/env perl
打开(名称,“NAMES.txt”);
而(){
咀嚼;
如果/_USA$/;#芝加哥(美国)在美国,则打印“$uu在美国\n”
#如果/(.*)美国$/;#美国芝加哥,则打印“$1在美国\n”
}
结束(姓名);
只需使用grep:
grep '_USA$' your_file> new_file
谢谢你的回复。但是我尝试了这种方式。我根本没有得到任何输出。我假设if条件没有很好的定义。还有其他方法可以实现吗?我对代码做了一些编辑,再次检查,它现在应该可以工作了。你有多个问题…好的,修复了最后一个问题:在i中模式周围不应该有引号正如tripleee在评论中所说,如果你想要的话,有更简单的方法来实现你想要的。如果你真的坚持要重新格式化输出,为什么你不干脆
grep\u USA names.txt
?或者sed-n's/\u USA$/&in USA/p'names.txt
?我现在正试图在perl中实现同样的效果。我像我一样使用正则表达式f($city=~m/^(_USA)/){print$city;}但没有得到输出。我不知道如何用perl获得$city
。我已经用perl代码更新了我的帖子。