我有一个包含路径列表的文件,如下所示:
"1" "/user/bin/share"
"2" "/home/user/.local"
"3" "/root/"
有没有办法提取只是路径?我不需要数字或引号。如何 sed 或 grep 文件中的路径?这样的任务需要什么正则表达式?
答案1
如果所有路径都以 开头/
,您可以只匹配/
后跟一系列非"
字符:
$ grep -o '/[^"]*' file
/user/bin/share
/home/user/.local
/root/
或者,对于更结构化的方法,可以使用awk
从第二个字段中删除引号并仅打印第二个字段:
awk '{gsub(/"/,"",$2); print $2}' file
答案2
假设路径不包含换行符,
$ sed 's/^.*[[:blank:]]"//; s/"$//' <file
/user/bin/share
/home/user/.local
/root/
该sed
代码首先删除每行上的所有内容,直到并包括"
前面有空格(空格或制表符)的第一个字符。然后它会删除"
末尾的 。
这允许路径包含空格和嵌入"
字符,但不允许包含空白+组合"
。
答案3
为什么不一个简单的
awk -F\" '{print $4}' file
/user/bin/share
/home/user/.local
/root/
工作?
答案4
简单的方法。使用 . 取出字段#4,并用引号作为分隔符cut
。
$ cut -f4 -d\" file
/user/bin/share
/home/user/.local
/root/
$