shell命令实现txt文件转换为csv文件

时间:2021-05-24 16:05:05

转换空格分隔的txt文件为csv文件的shell命令

而且空格数并不确定

cat test.txt | sed 's/\t/,/g;s/[[:space:]]//g' >test.csv



PS:有个简洁的方法

cat test.txt | tr "[[:space:]]" "\t" >test.csv

注:cat test.txt | tr "old value" "new value" >test.csv


sed详解

sed 执行过程为: 1. 从输入读取一行数据存入临时缓冲区,此缓冲区称为模式空间(pattern space) 2. 按指定的 sed 编辑命令处理缓冲区中的内容 3. 把模式空间的内容送往屏幕并将这行内容从模式空间中删除 4. 读取下面一行。重复上面的过程直到全部处理结束。


sed  p操作
显示文件的全部内容 $sed -n p test.sh
显示文件第五行的内容 $sed  -n  5p  test.sh
显示文件最后一行的内容 $sed  -n  '$p'  test.sh
显示文件从第3行开始到第10行的内容 $sed  -n 3,10p  test.sh
显示文件第3行以及之后10行的内容 $sed  -n 3,+10p  test.sh
显示文件从第3行开始到最后一行的内容 $sed  -n '3,$p'  test.sh
显示文件从第3行开始步长为5的行的内容 $sed  -n 3~5p  test.sh
显示文件中所有包含core的行 $sed  -n  /core/p  test.sh
显示文件中所有不包含core的行 $sed  -n  '/core/!p'  test.sh
显示文件中从第3行开始到其后第一次出现core的内容 $sed  -n  3,/core/p  test.sh UERNAME="yw" PASSWORD="123456" DBNAME="monitor_core"
显示文件中从第一次出现core的行开始到最后一行的内容 $sed  -n  '/core/,$p'  test.sh
显示文件中从第一次出现core开始的行到第一次出现eroc开始的行 $sed  -n  /^core/,/^eroc/p  test.sh
============================================================ sed替换命令
在每一个输入行中,将第一个出现的windows替换为linux $ sed  's/windows/linux/'  test.sh
在每一个输入行中,将第一个出现的windows替换为linux,打印替换结果的行 $ sed  -n  's/windows/linux/p'  test.sh
在每一个输入行中,将出现的每一个windows替换为linux $ sed  's/windows/linux/g'  test.sh
在每一个输入行中,将出现的每一个windows替换为linux,打印替换结果的行 $ sed  -n  's/windows/linux/g'  test.sh
在每一个输入行中,将出现的每一个unix替换为unix/linux(&表示匹配到的字符串) $ sed  -e  's/unix/&\linux/g'  test.sh
将所有连续出现的c都压缩成单个的c $ sed  's/cc*/c/g'  test.sh
删除首行的一个空格 $  sed   's/  //'  test.sh
删除每一行前导的连续“空白字符” $  sed  's/^[ \t]*//'  test.sh
删除以句点结尾的行中末尾的句点 $ sed  's/\.$//g'  test.sh
删除每行的第一个字符 $ sed  's/.//'  test.sh
删除每行结尾的所有空格 $ sed  's/  *$//'  test.sh
在文件的每一行开始处插入两个空格 $ sed  's/^/  /'  test.sh
在每一行开头加上一个尖括号和空格 $ sed  's/^/> /'  test.sh
将每一行开头处的尖括号和空格删除 $ sed  's/^> //'  test.sh
删除路径前缀 $ sed  's/.*\///'  test.sh $ ls  -d  /usr/share/man/man1  |sed  's/.*\///'
过滤掉所有的标点符号(.,?!) $ sed  's/\.//g'  -e  's/\,//g'  -e  's/\?//g'  -e  's/\!//g'  test.sh
注:无论什么字符,紧跟着s命令的都被认为是分隔符
$ sed  's#/some/path/old#/some/path/new#g'  test.sh          替换的速度优化:可以考虑在替换命令(“s/…/…/”)前面加上地址表达式来提高速度。 sed  's/foo/bar/g'  test.sh                     //标准替换命令 sed  '/foo/  s/foo/bar/g'  test.sh         //速度更快 sed  '/foo/  s//bar/g'  test.sh               //简写形式
若只替换第一次匹配foo的行,可以使用q短路后续行的执行。 sed  '/foo/{s/foo/bar/:q}'  test.sh
================================================================== 其他命令使用举例
删除所有空白行 $ sed  '/^$/d'  test.sh $ sed  '/./!d'  test.sh
删除文件顶部的所有空行 $ sed  '/./,$!d'  test.sh
从输入的开头一直删除到第一个空行 $ sed  '1,/^$/d'  test.sh
删除所有的偶数行,与sed -n '1~2p' test.sh等效 $ sed  'n;d'  test.sh
删除掉所有包含'GUI'的行 $ sed  '/GUI/d'  test.sh
将所有“GUI”都删除掉,并保持剩余部分的完整性 $ sed  's/GUI//g'  test.sh
在每一行后面增加一个空行 $  sed  G  test.sh
在匹配'regex'的行之后插入一个空行 $ sed  '/regex/G'  test.sh
将test.sh中从case开始的行到esac结束的行写到文件case-block $ sed  '/^case/,/^esac/w  case-block '  test.sh
在test.sh末尾($)追加新行 (反斜杠\是必需的,它表示将插入一个回车符。在任何需要输入回车的地方都必须使用反斜杠) $ sed  '$a\ >newline1\ >newline2\ >newline3'  test.sh
在匹配'regex'的行之后追加新行 $  sed  '/regex/a\ >newline1\ >newline2\ >newline3'  test.sh

注:在i\和c\操作的格式与上面的a\操作的格式相同