右。基本上我想要实现的是一个bash脚本,它将文件名作为第一个参数,并显示输入文件中的行:
我正在使用的输入文件示例包含以下内容:
-rw-r--r-- 1 root software 36 Dec 3 14:27 config
-rwxr-xr-x 1 root software 72 Dec 3 14:27 config2
-rw-rw-r-- 1 jonathan software 7410294 Dec 3 14:28 even larger file
-rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2
-rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file
-rwxr-xr-x 1 andrew software 823366 Feb 11 16:25 myprogram
-rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script
drwxrwsr-x 2 andrew software 4096 Dec 3 19:24 testdir1
drwxrwsr-x 2 bob software 4096 Dec 3 10:21 testdir2
drwxrwsr-x 2 david software 4096 Aug 23 14:24 testdir3
drwxrwsr-x 2 david software 4096 Dec 3 13:32 testdir4
drwxrwsr-x 2 james software 4096 Jan 5 14:24 testdir5
-rw-rw-r-- 1 james software 85 Dec 3 14:24 testfile1
我编写了脚本来询问文件名并打印文件内容:
#!/bin/bash
echo "Please enter your filename:"
read filename
while read line;
do echo -e "$line\n";
done < $filename
但是我不知道在逐行查找内容并搜索不包含“drw”的行的命令是什么,以及如何按示例输入文件中给出的大小对行进行排序。 / p>
编辑:这是我问题的第二部分。 现在我想修改脚本以获取第二个参数,如果提供该参数,则假定它是用户名。只会打印与用户名匹配的行。
例如:“jonathan”将打印以下内容:
-rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script
-rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file
-rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2
答案 0 :(得分:2)
以下是awk的解决方案:
$ awk '!/^d/ && $1 ~ /x/' text.txt | sort -k5,5n
-rwxr-xr-x 1 root software 72 Dec 3 14:27 config2
-rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script
-rwxr-xr-x 1 andrew software 823366 Feb 11 16:25 myprogram
-rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file
-rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2
以下是您可以在shell脚本中删除的版本:
file=$1
user=$2
awk '!/^d/ && $1 ~ /x/ && $3 ~/'"${user}/" "$file" | sort -k5,5n
答案 1 :(得分:0)
使用shell。
ls -l |grep -v "^d" |grep "^-rwx"|sort -k5n