Linux

shell学习

2020-02-20  本文已影响0人  天马行空爱做梦

1>jq内建函数 输出所有的keys 语法: jq keys

例如:
cat json_raw.txt | jq 'keys'
[
"employees",
"location",
"name"
]

2> sed如何匹配shell 中的变量, IP和获取IP地址

!/bin/bash

newip=(ifconfig | grep 0xfff | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v 255) echonewip

wrong : sed 's/.../"$newip"/g' log.txt > logmod.txt

sed -r 's/(\b[0-9]{1,3}.){3}[0-9]{1,3}\b'/$newip/

3> sed中替换变量

  1.   eval sed 's/$a/$b/' filename
    
  2.   sed "s/$a/$b/" filename
    
  3.   .sed 's/'$a'/'$b'/' filename
    
  4.   .sed s/$a/$b/ filename
    

我比较喜欢第二种,也就是:Sed后面的表达式一般用单引号引起来('),当需要使用变量时就换用双引号(")。

4>关于单双引号的区别:

单引号:shell处理命令时,对其中的内容不做任何处理。即此时是引号内的内容是sed命令所定义的格式。
双引号:shell处理命令时,要对其中的内容进行算术扩展。如果想让shell扩展后得到sed命令所要的格式

>5 exec 命令

exec是shell的内建命令,执行这个命令时,系统不会重启新的shell,而是用当前执行的shell进程替换当前的shell进程。


image.png

将file文件作为标准输出全部重定向到某个文件中。

命令:exec >out.txt
表示后面所有指令的输出内容,最后都会放到out.txt文件中。

指定文件标识符

exec 指定文件标识符后,可以通过该标识符对文件进行操作。
命令:exec 3<file.txt
这里制定后,那么标识符3就可以代表file.txt 了。
关闭指令:exec 3<&-
exec>/dev/tty 是将标准输出重定向到显示器(/dev/tty 为显示终端)

>6 for循环和while循环区别

for循环,默认是用空格作为间隔读取文件
while循环,默认是用换行符来读取文件

7>常用linux指令

find / -name filename

find 指定路径 -name 文件名

awk 列处理指令

下面打印第6列内容: cat test.txt |awk '{print $6}'

vim 一般模式下 10d 删除10行

xargs参考资料

重命名为new_filename

ls | xargs -n 1 -I {} cp {} new_{}

重新命名并以此累加为1.txt, 2.txt 2.txt

ls | cat -n | while read n f; do mv -n "f" "n.txt"; done

ls | cat -n | while read n f; do mv -n "f" "amda_n.jpg"; done

ls | cat -n | while read n f; do mv -n "f" "amda2_n.jpg"; done

ls | cat -n | while read n f; do mv -n "f" "call_n.jpg"; done

过滤查看具体成功的信息行数:

cat createlog.txt | grep "成功"| awk -F "," '{print $2 }'|uniq -c

unzip -v test.zip

查看压缩文件目录,但不解压。

cat rename.sh

!/bin/sh

index=1

files=(ls)

for j in "${files[@]}"; do

if [[ $j = *.jpg ]];then

mv jindex.jpg &

let index=index+1

fi

done

集群上获取ip和port值:

kubectl get svc | grep redis

kubectl get pods -o wide | grep kafka

kafka-0 2/2 Running 0 27h 10.151.3.193 vpc33 <none>

kafka-1 2/2 Running 0 2d22h 10.151.3.189 vpc23 <none>

kafka-2 2/2 Running 0 2d23h 10.151.3.185 vpc13 <none>

jq指令中[] 空白,是指遍历所有:

cat data.txt |jq '.data[].uid'

"5299"

"5291"

"5290"

"5287"

"5286"

替换换行符和替换单引号为双引号:

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/, /g' uuid.txt | sed "s/'/"/g">final.txt

Test data

cat uuid.txt

'7472'

'7370'

'7361'

'7362'

连起来一行搞定:

tr '\n' , <uuid.txt | tr "'" """ >oneline.tx

解读:

tr '\n' , < file 完成换行符被替换

tr “\’” “\”” < file 完成

$? 获取上一个指令的返回值或者命令运行状态值。如果¥?==0 表示执行成功,否则fail

if[ $? !=0 ]

 then

     echo "failed"

      exit 2

else

echo "succedd"

fi

ps s 显示当前系统中所有进程,包括具体的指令名字和pid信息。

UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND

0 363 00000000 00000000 00380004 4b817efb Ss+ pts/1 0:00 bash

0 1051 00000000 00000000 00000000 <88084003 S+ pts/0 8:30 watch -n1 ps -ef

上一篇下一篇

猜你喜欢

热点阅读