linux排版命令,linux 文本排版

===========  格式化

=========================

[root@zjs_nbs_gxq_ga wrq]# cat test

a  a

a

b  b

b

c  c

c

d  d  d

[root@zjs_nbs_gxq_ga wrq]# cat test |xargs

a a a b b b c c c d d d

[root@zjs_nbs_gxq_ga wrq]# cat test |xargs -n 3

a a a

b b b

c c c

d d d

[root@zjs_nbs_gxq_ga wrq]# cat test |xargs -n 3|tr " "

"\t"

a  a

a

b  b

b

c  c

c

d  d

d

[root@zjs_nbs_gxq_ga wrq]# sed '$!N;s/\n/\t/' test

# 合并每个奇数行和偶数行

a  a

a

b

b

b

c  c

c  d  d  d

vi里 :%s/\(^.*$\)\n\(^.*$\)/\1\2/g # 合并每个奇数行和偶数行

[root@zjs_nbs_gxq_ga wrq]# sed ':a;N;s/\n/\t/;ba;' test #

合并所有行

[root@zjs_nbs_gxq_ga wrq]# sed '/b/{N;s/\n/\t/}' test

# 合并匹配模式及其下一行

a  a

a

b  b

b

c

c

c

d  d  d

===============  删除空白行

=================

[root@zjs_nbs_gxq_ga wrq]# cat file

abc

bcd

cde

[root@zjs_nbs_gxq_ga wrq]# cat file |tr -s '\n'

abc

bcd

cde

[root@zjs_nbs_gxq_ga wrq]# sed '/^$/d'

file

abc

bcd

cde

[root@zjs_nbs_gxq_ga wrq]# sed '/^[[:space:]]*$/d'

file

abc

bcd

cde

[root@zjs_nbs_gxq_ga wrq]# sed -e '/^$/{N;/^\n*$/D}' file

# 多个连续的空行合并为一个空行

abc

bcd

cde

=========== 删除重复行

============

[root@zjs_nbs_gxq_ga

wrq]# cat filename

abc

a  bc

bcd

bcd

abc

abc

[root@zjs_nbs_gxq_ga wrq]# awk

'!a[$0]++' filename # 原顺序

abc

a  bc

bcd

abc

[root@zjs_nbs_gxq_ga wrq]# cat filename |sort| uniq #

换顺序

abc

abc

a  bc

bcd

================== 置换前两列 ====================

[root@zjs_nbs_gxq_ga wrq]#cat test1

first:second

one:two

[root@zjs_nbs_gxq_ga wrq]#sed 's/\(.*\):\(.*\)/\2:\1/'

test1

second:first

two:one

[root@zjs_nbs_gxq_ga wrq]#

================ .* 匹配任意数目的字符 =============

^_ _ *.*  匹配具有一个或多个前导空格的行

如:grep "^  *.*"

filename

grep -c '^$' filename  ;计算文件中的空行数

================ 交换行 ================

1已知行号时交换两行

zj@zj:~/Script/blog_script$ cat test

baidu music so terrible so bad

microsoft haha haha

yahoo byebye

google princess so good

这里是交换1,4行.当然你可以根据自己需要修改

zj@zj:~/Script/blog_script$ for(( i=1;i<=4;i++ )); do

case $i in 1) sed -n 4p test;; 4) sed -n 1p

test;; *) sed

-n ${i}p test;; esac; done

google princess so good

microsoft haha haha

yahoo byebye

baidu music so terrible so bad

连续时好说:

zj@zj:~/Script/blog_script$ sed '1{h;d};2{G}' test

microsoft haha haha

baidu music so terrible so bad

yahoo byebye

google princess so good

2不知道行号

要交换的两行是连续行的情况下:

zj@zj:~/Script/blog_script$ sed '/baidu/{h;d};/microsoft/{G}'

test

microsoft haha haha

baidu music so terrible so bad

yahoo byebye

google princess so good

ps:交换包含bai与microsoft的行

两行不连续的情况:

zj@zj:~/Script/blog_script$ sed

'/baidu/{:a;N;/google/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}'

test

google princess so good

microsoft haha haha

yahoo byebye

baidu music so terrible so bad

ps:交换含有baidu与google的行

研究了下写了个不论连续不连续的都可以的:

zj@zj:~/Script/blog_script$ sed

'/baidu/{:a;N;/microsoft/!ba;/[^\n]*baidu[^\n]*\n[^\n]*microsoft[^\n]*$/{s/\([^

\n]*baidu[^\n]*\)\n\(.*\)/\2\n\1/};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}'

test

microsoft haha haha

baidu music so terrible so bad

yahoo byebye

google princess so good

zj@zj:~/Script/blog_script$ sed

'/baidu/{:a;N;/google/!ba;/[^\n]*baidu[^\n]*\n[^\n]*google[^\n]*$/{s/\([^\n]

*baidu[^\n]*\)\n\(.*\)/\2\n\1/;};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}'

test

google princess so good

microsoft haha haha

yahoo byebye

baidu music so terrible so bad

ps:上面代码

/baidu/{....}  遇到含有baidu的行,开始做{}中的命令序列

:a;N;/google/!ba  循环读信息,直到读取google.

/[^\n]*baidu[^\n]*\n[^\n]*google[^\n]*$/这个就是说如果哦baidu与google之间只有一个\n,即这两个是连续行就:{s/\([^

\n]*baidu[^\n]*\)\n\(.*\)/\2\n\1/;}交换这两行

如果不匹配上面的模式就是说不是连续行了.

s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}

而在匹配连续行的情况下是不可能匹配上面表达式的.ok~~~~

3.忘了还有交互奇偶行

zj@zj:~/Script/blog_script$ sed

'$!N;s/\([^\n]*\)\n\([^\n]*\)/\2\n\1/' test

microsoft haha haha

baidu music so terrible so bad

google princess so good

yahoo byebye

========================================================

●Shell中的环境变量有哪些?它们各有什么作用?

环境变量在实际Shell编程中广泛使用,是需要重点掌握的。现在只介绍几个主要的常用的变量:

1)$HOME  当前用户的主目录

2)$PATH  命令的搜索路径

3)$PS1  命令提示符,就是你在Linux命令行下那个总出现的提示符,通常是$,也可能定制成其他类型。

4)$PS2  第二命令提示符,比如当你输入的命令需要接受输入时,也会给出一个提示符,通常为>

5)$IFS  输入字段分隔符,就是当你读入信息时用来将字符串分隔为单词的符号,通常为空格、制表符以及回车符号。

6)$0  所执行的Shell脚本的名字

7)$#  Shell脚本(命令)传递的参数个数

8)$$  所执行的Shell脚本的进程号,通常用来生成唯一的临时文件名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值