我想打印仅第 49 行并用“,”代替制表符(最好使用 sed)。
sed -n '49p' file.txt | sed 's/,/\t/g'
如何在没有管道的情况下在一个命令中完成?
sed -n '49p; s/,/\t/g'
不起作用,sed '49p; s/,/\t/g'
也不起作用。
谢谢!
答案 0 :(得分:2)
49
是地址,p
和 s//
是命令。您可以用地址作为任何命令的前缀。因此,不要在行 p
上仅使用 49
,而是首先使用 s///
:
sed -n '49s/,/\t/gp' file
请注意,在这种情况下,p
只是 s///
的标志,而不是实际的 p
命令。对于任意命令的更一般情况,您可以重复每个命令的地址 49s/,/\t/g; 49p
或将命令分组到一个地址 49 { s/,/\t/g; p }
后面。
正如 comments 中所指出的,您可以通过在第 49 行之后退出 sed
来加速命令,以便不再处理文件的其余部分(类似于 head -n 49 | sed
):
sed -n '49 { s/,/\t/gp; q }' file
答案 1 :(得分:1)
您可以删除除第 49 行以外的任何行,这会忽略除第 49 行之外的其余 sed 命令:
sed '49!d;s/,/\t/g' file.txt
答案 2 :(得分:1)
如果你想用awk
来做,你可以用
awk 'NR==49{gsub(/,/,"\t");print;exit}' file
NR==49
将检查第 49 行是否正在处理,如果是,gsub(/,/,"\t")
将用该行中的制表符替换每个逗号,print
将显示它和 { {1}} 将阻止 awk 处理更多行。
答案 3 :(得分:0)
这可能对你有用(GNU sed):
sed '49!d;y/,/\t/;q' file
如果不是第 49 行,则删除。
如果是第 49 行,将逗号转换为制表符并退出。