我有一个包含文件列表的文件。该文件看起来像这样
$ cat filelist
D src/layouts/PersonAccount-Person Account Layout.layout
D src/objects/Case Account-Record List.object
我想先剪切两列并使用目录路径仅打印文件名。此列表是动态的。文件名之间有空格。所以我不能使用空格作为分隔符。如何使用AWK
命令获取此信息?
输出应该是这样的
src/layouts/PersonAccount-Person Account Layout.layout
src/objects/Case Account-Record List.object
答案 0 :(得分:1)
这将完全符合您的示例:
sed -E 's/(.*)([ ][a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9. -]+)/\2/g' filelist
它匹配你的路径(包括空格,如果有的话),然后用一个匹配替换整行。易腻的柠檬挤压:)
问候!
答案 1 :(得分:1)
一个简单的grep
grep -o '[^[:blank:]]*/.*' filelist
这是零个或多个非空白字符,后跟斜杠,后跟字符串的其余部分。
这与任何没有斜线的行都不匹配
答案 2 :(得分:1)
仅打印带有目录路径的文件名
awk 方法:
<li class="razvernut">
<span class="span"></span>
<span class="otherspan"></span>
<a>Show ul.sub-menu with 0 max-height</a>
<ul class="sub-menu">...</ul>
</li>
输出:
awk '{ sub(/^[[:space:]]*[^[:space:]][[:space:]]+/,"",$0) }1' filelist
<强> ---------- 强>
仅提取文件的 basename :
src/layouts/PersonAccount-Person Account Layout.layout
src/objects/Case Account-Record List.object
输出:
awk -F'/' '{print $NF}' filelist
答案 3 :(得分:1)
这是一个可移植的POSIX shell解决方案:
public MyClass implements Comparable<MyClass>{
private static final Comparator<MyClass> NATURAL_ORDER_COMPARATOR =
Comparator.comparing(MyClass::getFoo)
.thenComparing(MyClass::getBar);
...
public int compareTo(MyClass other){
return NATURAL_ORDER_COMPARATOR.compare(this, other);
}
}
这将遍历给定输入文件的每一行(或标准输入),并打印没有前两个空格或前面存在的文本的行。这并不贪心。
与此处的其他一些答案不同,这将在行的其余部分保留间距(如果有的话)。
如果你想把它作为一个单行:
#!/bin/sh
cat "$@" |while read line; do
echo "${line#* * }"
done
如果最上面的目录名称以空格开头,则会失败。要解决这个问题,你需要剥离前十个字符(我假设它是静态的):
while read L < filelist; do echo "${L#* * }"; done
作为单行代码,在bash中,可以通过使用子字符串来简化:
#!/bin/sh
cat "$@" |while read line; do
echo "${line#??????????}"
done
答案 4 :(得分:1)
你可以尝试一次:
bash-4.4$ cat filelist |awk '{$1="";print $0}'
src/layouts/PersonAccount-Person Account Layout.layout
src/objects/Case Account-Record List.object
否则,如果你想删除2列,那就是:
awk '{$1=$2="";print $0}'
这将产生以下输出:
bash-4.4$ cat filelist |awk '{$1=$2="";print $0}'
Account Layout.layout
Account-Record List.object
答案 5 :(得分:1)
试试这个:
awk -F" " '{$1=""; print $0}' filelist | sed 's/^ //c'
这里sed用于删除输出行的第一个空格。