一、awk

1、获取匹配关键字后的内容

awk '{ if(match($0,"关键字")) {print substr($0,RSTART+RLENGTH) }}'文件

#示例

    # 原始文本
    2018-07-31T09:33:08.160102Z 1 [Note] A temporary password isgenerated for root@localhost: oco4Pr&a!o;v

    # 命令
    awk '{ if(match($0,"root@localhost: ")) {print substr($0,RSTAR+RLENGTH) }}' test.log

    # 结果
    oco4Pr&a!o;v

2、去除文本中的空行

awk NF test.txt

# NF代表当前行的字段数,空行的话字段数为0,被awk解释为假,因此不进行输出。

3、获取匹配关键字后多少的位字符串

# 样本
a="Location: https://allinone.okd311.curiouser.com:8443/oauth/token/implicit#access_token=FBHwgR1jj2coLoYYfG9SdGUke9L9HmAU2IOI9GaMKrQ&expires_in=86400&scope=user%3Afull&token_type=Bearer"

# 获取"access_token="的值

# 方式一

    echo $a | grep "access_token=" |awk -F"access_token=" '/access_token=/{printf substr($2,0,43)}'

    # 结果: FBHwgR1jj2coLoYYfG9SdGUke9L9HmAU2IOI9GaMKrQ

# 方式二

    echo $a | grep "access_token=" |awk '{ if(match($0,"access_token=")) {print substr($0,RSTART+RLENGTH) }}'| awk -F '&' '{print $1}'

    # 结果: FBHwgR1jj2coLoYYfG9SdGUke9L9HmAU2IOI9GaMKrQ

4、使用多个分隔符分割字符串

# @, 空格和Tab都是字段分隔符
awk -F”[@ /t]" '{print $1 $2}'

5、为每行增加行号

awk '$0=NR":"$0' 文件名 > 新文件名

# $0表示原来每行的内容,
# NR表示行号,
# 双引号之间表示行号与原来内容之间的delimiter

二、sed

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明:
-e <script> 或 --expression=<script> 以选项中指定的script来处理输入的文本文件。
-f <script文件> 或 --file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h 或 --help 显示帮助。
-n 或 --quiet或--silent 仅显示script处理后的结果。
-V 或 --version 显示版本信息。

动作说明

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g

0、替换环境变量的值到文件中

如果想替换字符串中的值为环境变量的值,可以使用将匹配规则使用""括起来,在""中直接引用环境变量

echo "test asdasdas \$TEST" > test.txt
export aaaaa=1234
sed -i -e "s/\$TEST/$aaaaa/g" test.txt

如果变量的值中包含特殊字符,例如/,与sed匹配模式的关键字符造成歧义。可使用代替/

echo "test asdasdas \$TEST" > test.txt
export aaaaa=/1234
sed -i "s?\$TEST?$aaaaa?g" test.txt

1、新增内容到末尾行的末尾

sed '$ s/$/新增内容/'  file_path

2、去除文本中空行和开头"##"的行

sed '/^$/d;/^##/d'  file_path

3、去除文本中的空行

sed '/^\s*$/d' test.txt

4、多个匹配规则

sed -i -e '/hah/a lala\nhehe' -e '/lala/d' test

5、在查找到匹配行后的操作

sed -i '/hah/a lallalla' test   #在查找到匹配行后添加一行
sed -i '/hah/a lala\nhehe' test #在查找到匹配行后添加多行
sed -i '/hah/d' test #删除查找到匹配行

6、在查找匹配行的末首或末尾添加内容

sed -i '/ha/ s/^/la' test #在查找包含"ha"的行首追加"la","laha"
sed -i '/ha/ s/$/la' test #在查找包含"ha"的行末追加"la","hala"

7、去掉文本中开头带#号注释的行

sed -i -c -e '/^$/d;/^#/d'  file

8、去除文本中的换行符^M

Windows下保存的文本文件,上传到Linux/Unix下后总会在末尾多了一个换行符^M,导致一些xml、ini、sh等文件读取错误

sed 's/^M//' 原文件>新文件

# 注意,^M = Ctrl v + Ctrl m,而不是手动输入^M

9、每行前后添加空行

每行后面添加一行空行:

sed G tmp

每行前面添加一行空行:

sed '{x;p;x;}' tmp

每行后面添加两行空行:

sed 'G;G' tmp

每行前面添加两行空行:

sed '{x;p;x;x;p;x;}' tmp

每行后面添加三行空行:

sed 'G;G;G' tmp

每行前面添加三行空行:

sed '{x;p;x;x;p;x;x;p;x}' tmp

依次类推,添加几行空行,就有几个G或者x;p;x

10、如果行后有空行,则删除,然后每行后面添加空行

sed '/^$/d;G' tmp

11、在匹配行前后添加空行

如果一行里面有shui这个单词,那么在他后面会添加一个空行

sed '/shui/G' tmp

如果一行里面有shui这个单词,那么在他前后各添加一个空行

sed '/shui/{x;p;x;G}' tmp

如果一行里面有shui这个单词,那么在他前面添加一个空行

sed '/shui/{x;p;x;}' tmp

在第一行前面添加空行,想在第几行,命令中的1就改成几

sed '1{x;p;x;}' tmp

在第一行后面添加空行,想在第几行,命令中的1就改成几

sed '1G' tmp

12、每几行后面添加一个空行

每两行后面增加一个空行

 sed 'N;/^$/d;G' file.txt

每两行前面添加一个空行

 sed 'N;/^$/d;{x;p;x;}' tmp

每三行后面增加一个空行

 sed 'N;N;/^$/d;G' file.txt

每三行前面增加一个空行

 sed 'N;N;/^$/d;{x;p;x;}' tmp

13、以x为开头或以x为结尾的行前后添加空行

以xi为开头的行后面添加空行

 sed '/^xi/G;' tmp

以xi为结尾的行前面添加空行

 sed '/^xi/{x;p;x;}' tmp

以xi为结尾的行后面添加空行

 sed '/xi$/G;' tmp

以xi为结尾的行后面添加空行

 sed '/xi$/{x;p;x;}' tmp

三、grep

grep [OPTION]... PATTERN [FILE]...

-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
-l 只列出匹配的文件名
-L 列出不匹配的文件名
-w 只匹配整个单词,而不是字符串的一部分
-C 匹配的上下文分别显示[number]

1、统计某文件夹下文件的个数

ls -l /data|grep "^-"|wc -l   #不包含子目录
ls -lR /data|grep "^-"|wc -l  #不含子目录

2、统计某文件夹下目录的个数

ls -l /data |grep "^d"|wc -l  #不包含子目录
ls -lR /data|grep "^d"|wc -l  #包含子目录

3、统计某目录(包含子目录)下的所有某种类型的文件

ls -lR /data|grep txt|wc -l

4、去除文本中的空行

grep -v '^\s*$' test.txt

5、多个匹配条件

grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的 

grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

grep -E '关键词1|关键词2'

6、xargs配合grep查找

find -type f -name '*.php'|xargs grep 'GroupRecord'

7、查找路径下含有某字符串的所有文件

grep -rn "hello,world!" *

8、完全匹配关键词

grep -Fx 关键词

9、精准匹配

grep -w 关键词 
# 不加-w是默认情况

四、egrep

1、只显示文本中的非空行和非注释行

egrep -v '^$|#'  file_path

五、cut

1、获取硬盘某个分区的UUID号追加到fstab

blkid | grep /dev/sdb5 | cut -d ' ' -f 2 >>/etc/fstab;sed -i '$ s/$/ data ext4 defaults 0 0/' /etc/fstab

六、wc

1、统计某个目录下某种文件内总共多少行

find .  -name "*.java" -print | xargs cat | wc -l

七、find

1、显示指定路径的文件,排除文件夹

find . -name '*' -type f -print

2、显示指定路径的文件,排除指定文件夹

find . -name '*' ! -path "./.git/*" -type f -print

八、dos2unix

dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2unix命令其实就是将文件中的\r\n 转换为\n。而unix2dos则是和dos2unix互为孪生的一个命令,它是将Linux&Unix格式文件转换为Windows格式文件的命令。

安装

yum install dos2unix -y

#会安装dos2Unix、unix2dos、unix2mac这三条命令

用法

dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...]

-h      显示命令dos2unix联机帮助信息。
-k      保持文件时间戳不变
-q      静默模式,不输出转换结果信息等
-V      显示命令版本信息
-c      转换模式
-o      在源文件转换,默认参数
-n      保留原本的旧档,将转换后的内容输出到新档案.默认都会直接在原来的文件上修改,

1、一次转换多个文件

$> dos2unix filename1 filename2 filename3

2、默认情况下会在源文件上进行转换,如果需要保留源文件,那么可以使用参数-n

dos2unix -n oldfilename newfilename

3、保持文件时间戳不变

$ ls -lrt dosfile
 -rw-r--r-- 1 root root 67 Dec 26 11:46 dosfile

$ dos2unix dosfile
dos2unix: converting file dosfile to UNIX format ...

$ ls -lrt dosfile
 -rw-r--r-- 1 root root 65 Dec 26 11:58 dosfile

$ dos2unix -k dosfile
dos2unix: converting file dosfile to UNIX format ...

$ ls -lrt dosfile
 -rw-r--r-- 1 root root 65 Dec 26 11:58 dosfile

4、静默模式格式化文件

unix2dos -q dosfile

八、vscode

1、搜索空行并进行替换

按下ctrl+h键进行正则匹配:^\s*(?=\r?$)\n,然后进行替换操作

Copyright Curiouser all right reserved,powered by Gitbook该文件最后修改时间: 2021-09-02 11:24:44

results matching ""

    No results matching ""