如何根据unix或linux中的grep,sed或awk获取unix目录中文件的名称?
如何根据unix或linux中的sed,grep或awk获取unix目录中文件的名称?如何根据unix或linux中的grep,sed或awk获取unix目录中文件的名称?
不过,我觉得我可以做这样的事情:
for i in $(ls /tmp/files/date*); do
if [ $(cat $i | head -n 1 | grep -c "6") >= 1 ] ; then
echo $i
fi
done
我需要它来搜索所有文件的某个目录(只在它们各自的第一行),然后返回哪些文件具有在串他们。
感谢, 添
您可以简化您的脚本一点点,得到期望的结果:
for i in /tmp/files/date*; do
if head -n 1 "$i" | grep -q "6"; then
basename "$i"
fi
done
+1。我会添加'-q'选项来grep并引用'“$ i”'。 – 2012-04-10 17:37:11
@glennjackman:是的,你完全正确。 – bmk 2012-04-10 17:42:31
谢谢!!!这正是我所期待的。 – cyberboxster 2012-04-13 16:58:38
您可以使用basename
获得路径的最后部分(文件名)
$ basename '/usr/bin/env'
env
你的代码有很多问题。我会按照重要性或多或少的方式去处理它们。
- 你错过
then
:if [ $(cat $i | head -n 1 | grep -c "6" >= 1) ] ; then
- 不解析
ls
,水珠就足够了:for i in /tmp/files/date*; do
- 的
>=
应该是子shell之外:if [ $(cat $i | head -n 1 | grep -c "6") >= 1 ] ; then
- 的
>=
应该是-ge
来比较数字:if [ $(cat $i | head -n 1 | grep -c "6") -ge 1 ] ; then
- 报价
"$i"
和子shell,你并不需要引用6:if [ "$(cat "$i" | head -n 1 | grep -c 6)" -ge 1 ] ; then
- 的
grep
返回值可以用来控制,因为你想让它安静if
(切换-c
到-q
和你不需要计数:if cat "$i" | head -n 1 | grep -q 6 ; then
- 你不需要猫在这里:
if head -n 1 "$i" | grep -q 6 ; then
所以:
for i in /tmp/files/date*; do
if head -n 1 "$i" | grep -q 6 ; then
echo $i
fi
done
取决于你要与列表中做什么,你可能需要去了解它以不同的方式(find
,可能)。
你的结果脚本违反了你的观点#1。 ;-) – 2012-04-11 15:32:30
@DennisWilliamson哎呀。修正了,谢谢你的发现。 – Kevin 2012-04-11 15:38:37
“我需要它搜索某个目录中的所有文件(每个文件只有它们的第一行),然后返回哪些文件中包含该字符串。”
发现,grep的的组合,削减
find a_certain_directory_name -exec \grep -n -H -m 1 my_search_string {} \; | cut -f 1,2 -d : | grep -e ":1\$" | cut -f 1 -d :
不解析'ls':HTTP://mywiki.wooledge。org/ParsingLs – 2012-04-10 17:36:44
不要使用'ls',glob本身就足够了(并且不会像'ls'那样容易出现空白/丑陋的字符问题)。 – Kevin 2012-04-10 17:37:00