linux中shell执行注意细节
语法: bash -n a.sh #检测bash语法是否有错
bash -vx a.sh #查看a.sh的执行过程,+代表已经执行的动作
grep命令的语法: grep [OPTIONS] PATTERN [FILE...]
例如:
[root@a ~]# sed --help | grep '-r'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
[root@a ~]# sed --help | grep '\-r'
-r, --regexp-extended
[root@a ~]#
grep ‘-r’ -r参数默认当作选项,没有pattern,使用\进行转义后变为pattern
sed 命令的语法: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
sed ' '(模式空间,缓冲区) file ‘ ‘相当于屠宰加工厂,对文件进行处理工作
sed 's/Root/alice/gi' passwd s///代表替换,g代表全局,i代表忽略大小写
sed -r '1~2d' passswd 删除奇数行,从第一行开始,每隔2行删除 1、3、5、7、9、……
sed -r '0~2d' passwd 删除偶数行, 2、4、6、8、……
sed -r '/^Root/{n;s/bin/flash/gi}' passwd #其中{}代表sed需要执行的命令有多个;i中的g表示全局,i表示忽略大小写;/^Root/代表匹配到的内容,支持正则表达式语法。
sed的暂存空间和模式空间理解
其中h、g代表覆盖;H、G代表追加;h表示将模式空间的内容放到暂存空间,g表示将暂存空间的内容放回模式空间。暂存空间默认为回车符。x代表交换暂存缓存区和模式空间。
sed -r ’1h;$G‘ passwd #第一行覆盖到暂存空间;最后一行暂存空间追加到模式空间
sed -r '1{h;d};$G' passwd #第一行覆盖到暂存空间,然后删除第一行;最后一行暂存空间追加到模式空间
sed -r '1h;2,$g' passwd #第一行覆盖到暂存空间;第二行到最后一行从暂存空间覆盖到模式空间
sed -r '4h;5x;$G' passwd #第四行覆盖到暂存空间;第五行模式空间和暂存空间互换,此时暂存空间为第五行;最后一行暂存空间追加到模式空间
sed的反向选择
sed -r '3d' passwd #代表删除第三行
sed -r '3!d' passwd #代表除了第三行,删除其它行
sed多重编辑选项 -e
sed -r -e '1,3d' -e 's/Hema/yuhu/' filetext
sed -r '1,3d;s/Hema/yuhu/' filetext
sed删除注释行和空行
sed -r '^[ \t]*#;^[ \t]*$' filetext
sed -r '^[ \t]*(#|$)' filetext