您的位置:首页 > 其它

Sed 的man手册参数详细解释(二)

2010-12-12 17:40 197 查看
-i[SUFFIX], --in-place[=SUFFIX]

edit files in place (makes backup if extension supplied)

就地编辑文件,如果指定了-i的值(suffix)sed将会备份一份原文件。

解释:就地编辑文件,如果没有该选项,sed将输出送入标准输出。该选项使sed将输出送入原来的输入文件中,一旦指定了后缀名suffix了以后,sed将备份原来的输入文件,该备份文件名以原文件名后接
suffix命令,如果想在原文件名和后缀suffix之间有一个句点,那么必须在后缀suffix中包含一个句点,-i选项后面直接加备份文件后缀,-i和后缀之间没有空格。如果文件名需要特殊符号,必须要用反斜杠转义例如sed –n –i/ .bak –e ‘command’ txtfile或者sed –n –I’ .bak’ –e ‘command’ txtfile这样得到的备份名为txtfile□.bak就可以有空格了(这里我用□代表空格)。
/ +++++++++++++++++++++++++++++++++++++++例子4++++++++++++++++++++++++++++++++++++++
sed.txt的内容如下(“^$”代表空行):
This is the 1st line.

This is the 2nd line.
^$

This is the 3rd line.
sed命令(#后面的文字表示注释):
sed –n –i.bak -e '/^$/!{ #“/^$/!”是不要匹配空行,按回车键换行。
>#i这里是要在当前行前添加<LS>
>i /
><LS>
>#a这里是要在当前行后添加<LE>

>;a /
></LE>

>;p
>}' sed.txt 执行以后没有任何显示,是因为处理的结果输入写入到sed.txt,原来的内容已经备份到

sed.txt.bak中了,cat一下:
sed.txt的内容如下:

<LS>

This is the 1st line.

</LE>

<LS>

This is the 2nd line.

</LE>

<LS>

This is the 3rd line.

</LE>

Sed.txt.bak内容为(这里我用“^$”代表空行):

This is the 1st line.

This is the 2nd line.
^$

This is the 3rd line.
/++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-c, --copy

use copy instead of rename when shuffling files in -i mode (avoids change of input file ownership)

当在文件树上操作节点时,使用拷贝,而不是重命名。避免改变输入文件的所有权关系。
解释:这个比较难理解,在含有-i[suffix]模式下,如果-i后面填写了后缀名,如果有-c选项,那么-i[suffix]指定的备份所有者将会改变成当前用户,修改后的原文件所有者不改变,如果没有-c选项,原文件改变后所有者变为当前用户,备份文件所有者不改变,也就是为原来文件的所有者。以上前提是在当前用户对原文件有w权限,如果没有w权限结果不一样了。
/ +++++++++++++++++++++++++++++++++++++++例子5++++++++++++++++++++++++++++++++++++++

sed.txt的内容如下:
This is the 1st line.

This is the 2nd line.

This is the 3rd line.
sed.txt的文件属性为(ls -l):-rw-rw-rw- 1 root root 66 Dec 11 13:03 sed.txt

然后我用系统中的一个普通用户centos执行两个命令
1.sed命令(带有-c选项):
sed –n –c –i.bak –e ‘1p’ sed.txt
用cat查看sed.txt的内容为:

This is the 1st line.
此时sed.txt的文件属性(ls -l): -rw-rw-rw- 1 root root 22 Dec 11 13:41 sed.txt可以看到它的内容变了,但是所有者不变,权限也不变;

备份的文件sed.txt.bak的内容为:

This is the 1st line.

This is the 2nd line.

This is the 3rd line.

文件属性(ls -l): -rw-rw-r-- 1 centos centos 66 Dec 11 13:41 sed.txt.bak可以看到备份文件

所有者变成了centos了,而且文件权限也改变了。
2.sed命令(不带有-c选项):

Sed –n –i.bak –e ‘1p’ sed.txt

执行该命令以后,用cat查看sed.txt文件的内容为:

This is the 1st line.
此时sed.txt的文件属性(ls -l): -rw-rw-rw- 1 centos centos 22 Dec 11 13:41 sed.txt

可以看到文件sed.txt内容改变了,同时文件所有者改变为centos,文件权限不变;
备份文件sed.txt.bak的内容为:

This is the 1st line.

This is the 2nd line.

This is the 3rd line.
文件属性(ls -l): -rw-rw-rw- 1 root root 66 Dec 11 13:40 sed.txt.bak文件的权限和所有者不变。
总结:-c选项要配合-i使用,使用-c可以在修改原文件的情况下保持原文件的所有者。如果使用-i选项而不使用-c将会改变原文件所有者为当前用户(注意这里说的是“原”文件而不是“源”文件)。如果-i指明了后缀,备份的文件的所有者变化正好和原文件变化情况相反;这里的总结只讨论文件的所有者而已不讨论权限。
/++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: