我有一个大文件,它由很多不同的行组成,只有一个commen关键字存储。
PROC:storage123:0702:2108:0,1,2,3,4,5:storage:vers:storaged:storage123:Storage
123:storage123:-R /etc/orc/storage123 -e emr123@localhost -p Xxx::
PROC:storageabc:0606:2108:0,1,2,3,4,5:storage:vers:storaged:storageabc:Storage
abc:storageabc: -e emabc@localhost -R /etc/orc/storageabc -p 654::
我需要做的是grep在 -R后的所有存储关键字上找到的路径。但我只想要这条道路,之后什么都没有。 -R可以在不同的地方找到,所以没有模式。
我创建了一个似乎有效的espressionen,但我认为我的复杂程度(而且不是100%肯定匹配)比它本来应该的那么多。
[root:~/scripts/] <conf.txt grep -o 'R *[^ ]*' | grep -o '[^ ]*$' | sed 's/.*R\///'
/etc/orc/storage123
/etc/orc/storagerabc
表达式也很难在bash脚本中实现,所以更简单的东西会很棒。我稍后会在脚本中使用这些路径。
干杯
答案 0 :(得分:4)
您的尝试很好,但您可以使用后视来简化它:
$ grep -Po '(?<=-R )[^ ]*' file
/etc/orc/storage123
/etc/orc/storageabc
基本上它会查找字符串-R
(注意空格),然后它会将所有内容打印到一个空格。
答案 1 :(得分:1)
$ sed 's/.*-R \([^ ]*\).*/\1/' file
/etc/orc/storage123
/etc/orc/storageabc