/Home/in/test_file.txt
echo /Home/in/test_file.txt | awk -F'/' '{ print $2,$3 }'
给出的结果为:
Home in
但是我需要/Home/in/
作为结果。我必须获得test_file.txt
以外的所有内容
如何实现?
答案 0 :(得分:1)
$ echo '/Home/in/test_file.txt' | awk '{sub("/[^/]+$","")} 1'
/Home/in
$ echo '/Home/in/test_file.txt' | awk '{sub("[^/]+$","")} 1'
/Home/in/
$ echo '/Home/in/test_file.txt' | sed 's:/[^/]*$::'
/Home/in
$ echo '/Home/in/test_file.txt' | sed 's:[^/]*$::'
/Home/in/
$ dirname '/Home/in/test_file.txt'
/Home/in
您的尝试awk -F'/' '{ print $2,$3 }'
并没有满足您的要求,因为-F'/'
告诉awk在每个/
处将输入分成多个字段,然后print $2,$3
告诉awk打印用空白字符(OFS的默认值)分隔的第二个和第三个字段。您可以这样做:
$ echo '/Home/in/test_file.txt' | awk 'BEGIN{FS=OFS="/"} { print "",$2,$3,"" }'
/Home/in/
要获得预期的输出,但这是错误的方法,因为它要删除不需要的字段并删除输入分隔符,然后添加恰好具有与输入分隔符相同值的新输出分隔符,而不是而不是像上面的其他解决方案一样简单地删除不需要的字段。
答案 1 :(得分:1)
echo /Home/in/test_file.txt | awk -F'/[^/]*$' '{ print $1 }'
..将打印除斜杠之外的所有内容
答案 2 :(得分:0)
awk
表现正常。
当您将斜杠/
定义为分隔符时,表达式中的字段将成为分隔符之间 的内容。
如果您还需要打印分隔符,则需要明确地进行打印,例如:
echo /Home/in/test_file.txt | awk -F'/' '{ printf "%s/%s/",$2,$3 }'
答案 3 :(得分:0)
有几种方法可以做到这一点:
使用dirname
:
$ dirname /home/in/test_file.txt
/home/in
使用Shell替换:
$ var="/home/in/test_file.txt"
$ echo "${var%/*}"
/home/in
使用sed :(请参见Ed Morton)
使用AWK:
$ echo "/home/in/test_file.txt" | awk -F'/' '{OFS=FS;$NF=""}1'
/home/in/
备注:所有这些方法均有效,因为您不能使用带斜杠(Is it possible to use "/" in a filename?)的文件名
注意:如果您只有一个没有路径的文件名,则除dirname
之外的所有文件都会失败。尽管dirname foo
将返回./
,其他所有对象将返回foo
答案 4 :(得分:0)
默认外壳的参数扩展如何?
setOnScrollChangeListener
解决方案2nd: 仅在GNU RecyclerView
中进行了测试。
val="/Home/in/test_file.txt"
echo "${val%/*}"
/Home/in
解决方案3: 在awk
中使用echo "/Home/in/test_file.txt" | awk 'BEGIN{FS=OFS="/"} {NF--}1'
。
match
解决方案4: 使用awk
echo "/Home/in/test_file.txt" | awk 'match($0,/\/.*\//){print substr($0,RSTART,RLENGTH-1)}'
答案 5 :(得分:0)
用空字符串替换最后一个字段,
将斜杠放回(内置)输出字段分隔符(OFS)
echo /Home/in/test_file.txt | awk -F'/' -vOFS='/' '{$NF="";print}