700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > shell脚本读取csv文件_shell命令实现txt文件转换为csv文件 | 学步园

shell脚本读取csv文件_shell命令实现txt文件转换为csv文件 | 学步园

时间:2024-01-29 18:55:25

相关推荐

shell脚本读取csv文件_shell命令实现txt文件转换为csv文件 | 学步园

转换空格分隔的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\操作的格式相同

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。