使用sed替换/使用TAB

时间:2011-06-15 19:43:04

标签: sed awk

我需要用制表符替换斜杠字符,以便使用awk提取目录名称。

/path/to/some/USEFUL_INFORMATION/in/some/path

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

sed -e 's/\//\t/g' filename

任何帮助都将不胜感激。

10 个答案:

答案 0 :(得分:31)

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

sed 's:ABC:DEF:g'

等同于

sed 's/ABC/DEF/g'

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

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

sed 's:/:<Control+V><TAB character>:g'

我机器的结果是:

$ pwd
/Users/brandizzi/sandbox/demo/mydemo
$ pwd | sed 's:/:        :g'
    Users   brandizzi   sandbox demo    mydemo

但是,如果您打算将所有路径目录放在awk变量$1$2等中,只需将斜杠声明为带有awk -F标志的字段分隔符:

$ pwd
/Users/brandizzi/sandbox/demo/mydemo
$ pwd | awk -F / '{print $3 " " $5}'
brandizzi demo

答案 1 :(得分:17)

尝试awk

awk  '{gsub("/","\t",$0); print;}' filename

答案 2 :(得分:5)

我找到答案,here。我有MacOSX所以我使用Control + v,然后使用Control + i。

sed -e 's/\/[CTR+V][CTR+I]/g' filename

答案 3 :(得分:4)

使用sed替换/使用TAB

sed 's/\//\'$'\t/g' filename.txt

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

提取目录名称:

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

awk -F'/' '{print $5}' filename.txt

答案 4 :(得分:1)

  

awk -F'/''{print $ 5}'your_file

这会打印USEFUL_INFORMATION

它将字段分隔符定义为/。请注意,由于您的字符串以/开头,因此第一个字段为空,因此您的字段数将比您想象的多一个。

答案 5 :(得分:1)

尝试将双引号(“”)放在一边而不是单引号(''),如以下命令所示。

sed -i "s/\//\\t/g" filename

通常我们在处理特殊字符时会使用双引号(“”)和 sed

在您的情况下,您没有转义TAB字符(\ t)中的 \

答案 6 :(得分:0)

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

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

// path     to     something

修改 提取文件路径的简单方法:

dirname /path/to/file.txt
#output /path/to

答案 7 :(得分:0)

查看dirnamebasename

$ dirname /path/to/some/USEFUL_INFORMATION/in/some/path
/path/to/some/USEFUL_INFORMATION/in/some

$ basename /path/to/some/USEFUL_INFORMATION/in/some/path
path

awk可以处理任何分隔符,例如/

$ echo /path/to/some/USEFUL_INFORMATION/in/some/path | awk -F"/" '{print $5}'
USEFUL_INFORMATION

答案 8 :(得分:0)

首先,如其他人所建议的那样,使用另一个字符作为分隔符。其次,使用引号的$'\t' 。以;作为分隔符的示例:

$ echo "/path/to/some/USEFUL_INFORMATION/in/some/path" | sed -e 's;/;'$'\t'';g'
path    to  some    USEFUL_INFORMATION  in  some    path

答案 9 :(得分:0)

另一种选择是在`printf "\t"`中使用sed

sh -c 'echo test1 test2 | sed -E "s#(.*) (.*)#\2`printf "\t"`\1#g"'

输出为:

test2   test1

这里显示它适用于您自己的示例:

sh -c 'echo /path/to/some/USEFUL_INFORMATION/in/some/path | sed "s#/#`printf "\t"`#g"'

输出:

path    to  some    USEFUL_INFORMATION  in  some    path