我有一个脚本,它使用cut
从包含绝对路径的搜索中选择一些信息。它看起来像:
PLACE=$(grep foo flatfile.txt | cut -d '/' -f 1-6)
输出如下:
machine1:/path/to/where/foo/is
machine2:/another/path/to/find/foo
我需要它看起来像这样:
machine1:/path/to/where/foo/is/
machine2:/another/path/to/find/foo/
这需要使用echo "$PLACE"
或类似内容打印到脚本末尾的控制台。输出将始终至少为2行,但通常更多。
我尝试了所有我能想到的回声,但它要么根本没有显示输出,要么输出:
grep: '/' is a directory
我在Solaris上运行bash 3.00,如果这有帮助的话。我真的很喜欢K.I.S.S.这只需要在cut命令的末尾添加一些东西,而不必使用sed或awk。但是,如果这是唯一的方式,那就这样吧。
答案 0 :(得分:1)
试试这个:
PLACE=$(grep foo flatfile.txt | cut -d '/' -f 1-6 | xargs -I "%" echo %/)
答案 1 :(得分:0)
尝试以下方法。请注意,$PLACE
未引用。这应该允许分词发生,然后printf
使用以下/
和换行符打印每个单词(对应于输出的一行,假设没有嵌入的空格)。尽管
printf "%s/\n" $PLACE
答案 2 :(得分:0)
您可以使用一个sed
命令,而不是多个其他命令:
$ PLACE=$(sed -n '/foo/s:\(\([^/]\+/\)\{6\}\)\(.*\)\+:\1:p' flatfile.txt)
$ echo "$PLACE"
machine1:/path/to/where/foo/is/
machine2:/another/path/to/find/foo/
$
...然后我想起为什么sed
有时让我不寒而栗: - /