我的文件如下:
This is a RESTRICTED site.
All connections are monitored and recorded.
Disconnect IMMEDIATELY if you are not an authorized user!
sftp> cd outbox
sftp> ls -ltr
-rw------- 1 0 0 1911 Jun 12 20:40 61N0584832_EDIP000749728818_MFC_20190612203409.txt
-rw------- 1 0 0 1878 Jun 13 06:01 613577165_EDIP000750181517_MFC_20190613055207.txt
我只想用一个命令打印.txt文件名。
我可以做到:
grep -e '^-' outfile.log > outfile.log2
..仅给出以“-”开头的行。
-rw------- 1 0 0 1911 Jun 12 20:40 61N0584832_EDIP000749728818_MFC_20190612203409.txt
-rw------- 1 0 0 1878 Jun 13 06:01 613577165_EDIP000750181517_MFC_20190613055207.txt
然后:
awk '{print $9}' outfile.log2 > outfile.log3
..给出所需的输出:
61N0584832_EDIP000749728818_MFC_20190612203409.txt
613577165_EDIP000750181517_MFC_20190613055207.txt
所以问题是,这两个命令可以组合成1个吗?
答案 0 :(得分:7)
您可以使用一个awk
:
awk '/^-/{ print $9 }' file > outputfile
或
awk '/^-/{ print $9 }' file > tmp && mv tmp file
它是这样的:
/^-/
-查找以-
开头的每一行{ print $9 }
-仅显示匹配行的字段9。答案 1 :(得分:3)
似乎真的不想要您想要的-
。如果只想获取.txt
文件作为输出,请过滤文件名:
awk '$9 ~ /\.txt$/{print $9}' input-file
答案 2 :(得分:1)
在启用grep
(PCRE
)标志的情况下使用-P
:
grep -oP '^-.* \K.*' outfile.log
61N0584832_EDIP000749728818_MFC_20190612203409.txt
613577165_EDIP000750181517_MFC_20190613055207.txt
'^-.* \K.*'
:从-
到最后一个空格的行被匹配但被忽略(\K
左边的任何内容都将被匹配和忽略)和\K
的右边部分已匹配将被打印。
答案 3 :(得分:0)
由于他清楚地写了I want to print only the .txt file names
,因此我们应该测试txt文件,并且由于文件名始终是最新的列,因此我们仅通过测试最新提交的行来使它更易于移植:
awk '$NF ~ /\.txt$/{print $NF}' outfile.log > outfile.log2
61N0584832_EDIP000749728818_MFC_20190612203409.txt
613577165_EDIP000750181517_MFC_20190613055207.txt