在看linuxkernel根目录下的makefile的时候看到这样一句:
SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
-e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ )
shell函数:
这里的$(shell )是make里的shell函数。
make手册上是这样描述shell函数的:make可以使用shell函数和外部通信。
sed:
看起来很吓人的sed命令,理解了之后,会发现它其实很友好。
sed是stream editor(流式编辑器)的缩写。它不会修改文件,除非使用shell重定向来保存结果。sed编辑器逐行处理文件或输入,并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存到缓冲区中,然后处理缓冲区中的行,完成后把该行发送到屏幕。sed每处理完一行就将其从临时缓冲区中删除,然后读下一行到临时缓冲区、、、、直到处理完最后一行,sed运行结束。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改源文件。
定址:
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者结合。如果没有指定地址,sed将处理输入文件的所有行。
sed -n 3p datefile //只打印第三行 p:print
sed -n 100,200p datefile //只可以打印或查看第100到第200行
sed 2,5d datefile //删除第二到第五行
sed /my/, /you/d datefile //删除包含my的行到包含you的行之间的行,这两行也在内
sed /my/, 10d //删除包含my的行到第十行的内容
sed命令:
a\:在当前行后面添加一行或多行
c\:用此符号后的新文本替换当前行中的文本。
i\:在当前行之前插入文本。
d:删除行
p:打印行
r:从文件中读取输入行。
!:对所选行意外的所有行应用命令。
s:用一个字符替换另一个字符。
g:在行内进行全局替换,(所有都替换掉)
sed选项:
-e:进行多行编辑,即对输入行应用多条sed命令
sed使用范例:
xiahuixia@xiahuixia-Inspiron-3437:~$ vim pets.txt
this is my cat
my cat's name is betty
this is my dog
my dog's name is frank
this is my fish
my fish's name is george
this is my goat
my goat's name is adam
------------------------------------------------------------------------------------------------------------------------------------------------------------
把my换成夏惠霞‘s,s表示替换命令,/my/表示匹配my,/夏惠霞's/表示把匹配替换成夏惠霞’s,/g 表示一行上的替换所有的匹配)
-------------------------------------------------------------------------------------------------------------------------------------------------------------
xiahuixia@xiahuixia-Inspiron-3437:~$ sed "s/my/夏惠霞's/g" pets.txt
this is 夏惠霞's cat
夏惠霞's cat's name is betty
this is 夏惠霞's dog
夏惠霞's dog's name is frank
this is 夏惠霞's fish
夏惠霞's fish's name is george
this is 夏惠霞's goat
夏惠霞's goat's name is adam
但是,上面的sed命令并没有对pets.txt文件进行修改,只是把处理过后的内容输出,如果要写回文件,可以使用重定向:
xiahuixia@xiahuixia-Inspiron-3437:~$ sed "s/my/夏惠霞's/g" pets.txt>夏惠霞pets.txt
xiahuixia@xiahuixia-Inspiron-3437:~$ vim 夏惠霞pets.txt
this is 夏惠霞's cat
夏惠霞's cat's name is betty
this is 夏惠霞's dog
夏惠霞's dog's name is frank
this is 夏惠霞's fish
夏惠霞's fish's name is george
this is 夏惠霞's goat
夏惠霞's goat's name is adam
在每一行最前面加点东西:
1
2
3
4
5
6
7
8
9 |