Bootstrap

linux 的sed的echo,Linux echo, sort, sed 等一些命令总结(示例代码)

linux echo, sort, sed是初学linux shell script 的一些常用的命令。基本上来说,如果能够掌握了这些命令,我们就能写出一些不错的linux脚本。以下是我遇到的以下常用的echo,sort, sed等命令的一些应用;

1.  echo -e: BW="f25\nf50\nf75\nf100\n";

如果直接echo $BW, 结果是f25\nf50\nf75\nf100\n。所以我们必须加上-e选项才能实现换行的目的,即echo -e $BW

Note:echo -e 处理特殊字符

若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

\a 发出警告声;

\b 删除前一个字符;

\c 最后不加上换行符号;

\f 换行但光标仍旧停留在原来的位置;

\n 换行且光标移至行首;

\r 光标移至行首,但不换行;

\t 插入tab;

\v 与\f相同;

\\ 插入\字符;

\nnn 插入nnn(八进制)所代表的ASCII字符;

2. sort 排序: BW=`echo -e $BW|sed ‘s/f/f /g‘|sort -ugk2|sed ‘s/ //g‘`;

sed ‘s/f/f /g‘: 人为制造一个分隔符“ ”出来

sort -u:清除重复行

-g: 按照数字大小排序: 一般来说, 假如有五个数: 1  3 11 12 21, 它会按照第一个数的大小来排,即1 11 12 21 3, 加-g 或-n 之后,就会正常排序, 即1 3 11 12 21

-k: 一般和-t一起用, -t 是分隔符,默认为空格,sort-ugk2 其实是 sort -u -t " " -k2 -g。其中-k2, 是指按照分割符后面的值得大小排序

sed ‘s/ //g‘: 删除分隔符

Note: sort [-bcfMnrtk][源文件][-o 输出文件]

补充说明:sort可针对文本文件的内容,以行为单位来排序。

参  数:

-b   忽略每行前面开始出的空格字符。

-c   检查文件是否已经按照顺序排序。

-u   除去重复行

-f   排序时,忽略大小写字母。

-M   将前面3个字母依照月份的缩写进行排序。

-n   依照数值的大小排序。compare according to string numerical value

-g  compare according to general numerical value

-o   将排序后的结果存入指定的文件。

-r   以相反的顺序来排序。

-R random排序

-t   指定排序时所用的栏位分隔字符。

-k  选择以哪个区间进行排序。

参考:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html

3. sed: cat Runlist.txt | sed ‘s/^#.*//g‘|sort -R;

假如Runlist.txt里面的内容是:

test_short/test_UL_CellID

test_short/test#_UL_DL_cfg .2

test_short/test_UL_MCS

#test_short/test_UL_RNTI in the adb list

cat Runlist.txt | sed ‘s/^#.*//g‘|sort -R: 那么这句话是把以#开头的一行删除。

test_short/test_UL_CellID

test_short/test#_UL_DL_cfg .2

test_short/test_UL_MCS

cat Runlist.txt | sed ‘s/#.*//g‘|sort -R: 那么这句话是把以#后面的内容删除。

test_short/test_UL_CellID

test_short/test_UL_MCS

test_short/test#

cat Runist.txt | sed ‘/#/d‘: 删除#出现的那一行

test_short/test_UL_CellID

test_short/test_UL_MCS

3a. 匹配数据,然后进行操作

只需要在上述的基础上加上正则匹配

sed "/匹配的模式/处理的方式" file.txt

sed "/^root/d" file.txt 对开始有root的删除

cat Runist.txt | sed ‘/#/s/test_short/bugs/g/‘:  找到#出现的那一行,然后用bugs替换test_short

3b. 一个比较有趣的例子:如何替换\n也就是把所有的行都归为一行

我们可以用tr来代替sed去做这件事情: tr "\n" "  ": 用空格把 \n换行替代

Note: sed [-nefr] [动作] 文件

参数:

-n 安静模式,在sed处理的时候,所有来自STDIN的数据都会被输出到终端,加上-n会只输出处理的哪行

-e 直接在命令列上进行sed动作编辑

-f 直接将sed的动作写在文件内

-r sed动作支持延伸的正则表达(默认只是基础正则)

-i 直接修改文件内容(慎用,尤其是用系统文件做练习的时候)非常有用,不加这个选项,只会在屏幕中print出来

动作:

a append:增加,在当前行的下一行增加

c   :取代,取代n1到n2之间的行

d delete:删除

i 插入,目前行的上一行插入

p 打印,常常与-n使用

s 取代,s/old/new/g

http://blog.csdn.net/hello_hwc/article/details/40118129

;