使用sed替换/使用TAB

Lan*_*cut 25 awk sed

我需要使用选项卡替换斜杠字符,以便使用awk提取目录名称.

/path/to/some/USEFUL_INFORMATION/in/some/path
Run Code Online (Sandbox Code Playgroud)

我尝试过这样做,但它所做的只是在我的输出中加上"t".

sed -e 's/\//\t/g' filename
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

bra*_*zzi 32

首先,您可以使用另一个字符作为s///分隔符.命令

sed 's:ABC:DEF:g'
Run Code Online (Sandbox Code Playgroud)

相当于

sed 's/ABC/DEF/g'
Run Code Online (Sandbox Code Playgroud)

它将使您的命令更具可读性,因为您不必转义斜杠.

说,有些seds不支持字符转义等\t.例如,它在Mac OS X中发生在我身上.我的解决方案是按Control + V然后按Tab键:

sed 's:/:<Control+V><TAB character>:g'
Run Code Online (Sandbox Code Playgroud)

我的机器的结果是:

$ pwd
/Users/brandizzi/sandbox/demo/mydemo
$ pwd | sed 's:/:        :g'
    Users   brandizzi   sandbox demo    mydemo
Run Code Online (Sandbox Code Playgroud)

但是,如果你的目的是把在AWK变量的所有路径的目录$1,$2等等.只是声明斜线是字段分隔符使用awk -F标志:

$ pwd
/Users/brandizzi/sandbox/demo/mydemo
$ pwd | awk -F / '{print $3 " " $5}'
brandizzi demo
Run Code Online (Sandbox Code Playgroud)

  • 感谢:Mac的<Control + V> <TAB character>提示. (2认同)

ssa*_*ota 17

试试awk:

awk  '{gsub("/","\t",$0); print;}' filename
Run Code Online (Sandbox Code Playgroud)


qui*_*jen 7

使用 sed 用 TAB 替换 /

sed 's/\//\'$'\t/g' filename.txt
Run Code Online (Sandbox Code Playgroud)

通常,将 \'$' 放在制表符 (\t) 和换行符 (\n) 之前。在 bash 中工作。

要提取目录名称:

就个人而言,我会使用 grok12 的答案。

awk -F'/' '{print $5}' filename.txt
Run Code Online (Sandbox Code Playgroud)


Cli*_*der 5

我找到了答案,对我来说,在这里.我有MacOSX所以我使用Control + v,然后使用Control + i.

sed -e 's/\/[CTR+V][CTR+I]/g' filename
Run Code Online (Sandbox Code Playgroud)


Eri*_*tis 0

使用 + 作为分隔符 sed -e 's+/+\t+g'

echo 'path/to/something' | sed -e 's+/+\t+g'

// path     to     something
Run Code Online (Sandbox Code Playgroud)

编辑: 提取文件路径的更简单方法:

dirname /path/to/file.txt
#output /path/to
Run Code Online (Sandbox Code Playgroud)