使用sed / awk / cat来获取//之间的数据

时间:2013-07-18 02:57:45

标签: bash sed awk grep cat

我有一个文本文件,它总是不同的内容,我的测试文件是:

/home/bob/www/file

但它总是变为像

这样的新行
/home/joe/www/file3

我如何只提取用户的字段,没有别的,我不知道什么时候bob在文件上我不知道当joe在文件上时,它总是一个不同的用户名,我怎样才能将用户导出到使用cat / awk / sed或grep的新文件,任何类似的东西,我搜索了很多,但我没有找到结果

从我的文件测试中,我想将bob提取到一个新文件中,是否可行?不知道要提取的单词,要告诉你在/ slash / slash和/ slash之间提取单词

4 个答案:

答案 0 :(得分:2)

grepPCRE一起使用:

grep -oP '(?<=/home/)[^/]+' testfile

使用awk

awk -F/ '{print $3}' testfile

使用sed

sed 's,/[^/]\+/\([^/]\+\)/.*,\1,' testfile

使用bash

while IFS='/' read -ra name; do 
  echo "${name[2]}"; 
done < testfile

答案 1 :(得分:1)

假设用户名始终是路径的第二个组成部分,并且路径始终是绝对路径(以“/”开头)

username=$(cut -d/ -f3 < filename)

答案 2 :(得分:0)

正则表达式

/home/([a-z]*)/www/file

将匹配相关行并捕获名称。我不是awk,所以我不能告诉你如何应用这个,但也许这会帮助你找到自己的方式。

答案 3 :(得分:0)

试试这个:awk -F"/" '{printf( "%s\n", $3) }' test > newfile。在这里,awk正在读取“test”的输入文件,用“/”解析,然后将第3个字段(在第二个“/”之后)打印到一个名为“newfile”的新文件中。