关于shell中常用的命令cut awk sed printf xargs

xargs命令 一般与管道符号一起使用
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
参数:

-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。

printf
%ns: 输出字符串。n是数字指代输出几个字符
%ni: 输出整数。n是数字指代输出几个数字
%m.nf: 输出浮点数。m和n是数字,指代输出的整数 位数和小数位数。

输出格式:
\a: 输出警告声音
\b: 输出退格键,也就是Backspace键
\f: 清除屏幕
\n: 换行
\r: 回车,也就是Enter键
\t: 水平输出退格键,也就是Tab键
\v: 垂直输出退格键,也就是Tab键

############
cut
cut命令相对来说比较简单 只有两个参数
-f 截取第几列
-d 指定分隔符 默认分隔符是制表符 空白

#########
awk
awk ‘条件1{动作1} 条件2{动作2}…’ 文件名
先读取第一行的内容 然后再执行内容
如果没有BEGIN将不能对第一行执行 动作
awk -F后面不空格直接跟指定分隔符 (可以是字符串也可以是运算)

awk ‘BEGIN{printf “This is a transcript \n” } {printf $2 “\t” $6 “\n”}’ student.txt
打印 this is a transcript 换行 然后再打印第二行 制表符 第六行 换行

awk ‘BEGIN{FS=":"} {printf “This is a transcript \n” } {printf $2 “\t” $6 “\n”}’ student.txt
对第一行的内容就开始进行以":"分割 然后执行第一个动作 再执行第二个动作

cat /etc/passwd | grep “/bin/bash” | awk ‘BEGIN {FS=":"} {printf $1 “\t” $3 “\n”}’
将passwd文件中含有/bin/bahs的行打印出来,然后使用ask命令,使用:作为分隔符 打印第一行 制表符 第三行 换行符

awk ‘END{printf “The End \n” } {printf $2 “\t” $6 “\n”}’ student.txt
对文件student.txt中打印第二行 制表符 第六行 换行 然后最后打印END里的内容

########
sed 是一种几乎包括在所有 UNIX 平台(包括 Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
#sed [选项] ‘[动作]’ 文件名
选项
-n: 一般sed命令会把所有数据都输出到屏幕 , 如果加入此选择,则只会把经过sed命令处 理的行输出到屏幕。
-e: 允许对输入数据应用多条sed命令编辑,多条数据用分号分割。
-i: 用sed的修改结果直接修改读取数据的文件, 而不是由屏幕输出
动作:
a \: 追加,在当前行后添加一行或多行。添加多行时,除最后 一行 外,每行末尾需要用“\”代表数据未完结。
c \: 行替换,用c后面的字符串替换原数据行,替换多行时,除最 后一行外,每行末尾需用“\”代表数据未完结。
i \: 插入,在当期行前插入一行或多行。插入多行时,除最后 一行 外,每行末尾需要用“\”代表数据未完结。
d: 删除,删除指定的行。
p: 打印,输出指定的行。
s: 字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换格式类似)。

#sed ‘2p’ student.txt
没有指定任何选项 意味着对所有内容行进行处理 然后再打印第二行

#sed -n ‘2p’ student.txt
只打印第二行内容

#sed ‘2,4d’ student.txt
删除第二行到第四行,然后打印文件中的其他内容。但是不对文件本身修改。

#sed ‘2i content1’ student.txt
对文件的第二行插入内容content1 打印输出整个文件

#sed ‘4s/旧字符/新字符/g’ student.txt
把文件中第四行中的旧字符替换为新字符 但是不对文件进行修改

猜你喜欢

转载自blog.csdn.net/tang3827738w/article/details/93376369