标签: linux
xargs
将数据作为命令的参数传入,默认命令是echo
, 默认定界符是 空格。参数如下:
-
-n num
设置多行输出 -
-I str
设置代替符号,主要用于数据的插入位置 -
-d str
设置定界符,用于划分参数 - 还有更多参数参考help
批量改文件名例子:
ls | grep myfile | xargs -n 1 -I {} mv {} {}andyourfile
若要修改文本内容而不是简单拼接,可参考sed
或者awk
管道符 “|” 与 xargs区别
管道是实现:“将前面的标准输出作为后面的标准输入”
xargs是实现:“将标准输入作为命令的参数”
也就说要将前面命令的结果作为参数传入的话必须用到xargs,而作为要被处理的数据来输入的话就不用。
不太准确地说,结果放在命令前的只用管道符就可以,放在命令后的要用xargs
echo 'abc' | grep a # 'abc'放在grep前,只用管道
echo '--help' | xargs cat # '--help' 放在 cat 后,要用xargs
grep
找出匹配正则的行,要注意的是表达式分为basic与扩展正则两种
grep参考这里
并且grep不支持捕获组,需要捕获的需要用到下面的awk
或则sed
参数如下:
-
-E
: 使用标准的正则 -
-v
: 搜索结果取非 -
-n
: 输出匹配的行号 -
-o
: 输出匹配范式的内容
awk
强大使用的命令,用于对文本、数据处理。awk参考这里
常用参数:
-
-F str
: 定义定界符 -
-v var=value
: 定义{...}
里使用的变量
一个批量改文件名的例子:
有一堆文件名如abc_1_abc.png
,现将中间的数字加2
ls | grep abc_* | sort -t_ -nk2 -r | awk -F_ '{printf "mv %s %s_%d_%s\n", $0, $1, $2 + 2, $3}' | bash
## sort 用于倒序,防止覆盖文件,
sed
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
其他
到行首: ctrl + a
到行尾:ctrl + e
取消当前命令: ctrl + c
删除光标前的字符:ctrl + u
字符串操作
http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html