打印

make的shell函数 sed命令

[复制链接]
291|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冷冻链|  楼主 | 2018-9-21 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在看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

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

397

主题

397

帖子

0

粉丝