linux 笔记本

16 篇文章 1 订阅

shell linux相关知识

xargs

xargs 命令行参数转换
xargs 能够将输入数据转化为特定命令的命令行参数;这样,可以配合很多命令来组合使用。比如grep,比如find;

将多行输出转化为单行输出
cat file.txt| xargs
\n 是多行文本间的定界符

将单行转化为多行输出
cat single.txt | xargs -n 3
-n:指定每行显示的字段数

xargs参数说明
-d 定义定界符 (默认为空格 多行的定界符为 \n)
-n 指定输出为多行
-I {} 指定替换字符串,这个字符串在xargs扩展时会被替换掉,用于待执行的命令需要多个参数时
eg:
cat file.txt | xargs -I {} ./command.sh -p {} -1
-0:指定\0为输入定界符
eg:统计程序行数

find source_dir/ -type f -name "*.cpp" -print0 |xargs -0 wc -l

grep

  • -o 只输出匹配字符
  • -P 可以让grep使用perl的正则表达式语法

grep -E 选项可以用来扩展选项为正则表达式。 如果使用了grep 命令的选项-E,则应该使用 | 来分割多个pattern,以此实现OR操作。
grep -E ‘pattern1|pattern2’ filename
egrep 命令等同于‘grep -E’。因此,使用egrep (不带任何选项)命令,以此根据分割的多个Pattern来实现OR操作.
egrep ‘pattern1|pattern2’ filename
使用grep -e 选项,只能传递一个参数。在单条命令中使用多个 -e 选项,得到多个pattern,以此实现OR操作。
grep -e pattern1 -e pattern2 filename

awk

readval=`echo "$rd_cmd"| grep "^0x"| awk '{print $2;}'`
ifconfig | grep -A 3 "enp13s0" | grep "RX pa" | gawk '{print $3}'

sed

sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。

  • -e
    • -e 允许在同一行执行多个命令
ifconfig | sed -e '5,$d' -e 's/RX/add/g'
  • -n选项:只显示匹配处理的行(否则会输出所有)(也就是关闭默认的输出)

  • -i 直接对文件进行操作

  • p 打印

    • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~

    • ifconfig | sed -n ‘5,7p’

    • sed ‘s/1324/aaaa/p’

    • sed -n ‘/last/,4p’ data //打印匹配last的行 到第4行

    • sed -n ‘/^#/!p’ test.conf

      • 打印不以#开头的行
cmdout=`testbox fpga_read ${FPGA[$port]} ${BLOCK[$port]} ${OFFSET[$dir$port]}${line% *} -n 2 | sed '$d'`
- sed '$d'   //删除最后一行
  • a 行后追加

  • i 行前追加

  • r 外部读入 行后追加

  • w 匹配行写入外部文件

  • d 删除

  • s 修改

    • s/old/new

    • s/old/new/g

    • s/old/new/2g

    • s/new/new/ig

    • ifconfig eth0 | grep ‘inet addr’ | sed ‘s/^.*addr://g’

    • sed '/world/s/^/Li ’ myfile

      • 在匹配world行的行首添加Li
    • sed ‘s/linux/jie &/’ myfile

      • 在匹配linux的行 linux字符前加jie , &代表linux

      • &

        • 保存查找串以便在替换串中引用
        • s/my/&/ 符号&代表查找串。my将被替换为my
      • 分组

        • sed ‘/you/s/(.*)/\1 Li/g’ myfile

          • () 代表分组
          • \1引用第一个分组

watch

实时查看输出

echo

  • echo $a
  • 如果使用 echo a 输 出 变 量 , 则 变 量 中 的 换 行 都 会 被 忽 略 掉 , 所 有 内 容 输 出 到 一 行 而 使 用 e c h o " a 输出变量,则变量中的 换行都会被忽略掉,所有内容输出到一行 而使用 echo " a使echo"a" 可正常输出变量中的换行
  • -e
#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
	- OK! It is a test

管道

find . -name '*.sh' | grep reset
find . -name '*.sh' | xargs grep reset
find . -name '*.sh' | xargs cat

重定向

  • > 输出重定向
  • >> 追加输出

expr bc

  • expr

    • 用于整数计算

    • 对包含空格和其他特殊字符的字符串要用引号括起来

    • 运算符左右都有空格,如果没有空格表示是字符串连接

    • 对于四则运算,最好用$(())代替expr,效率更高,而且运算符两边不用空格

    • 对于四则运算,也可以使用$[],运算符两边也不用空格

      • (())等价于[]命令
      • result=$[a+b] # 注意等号两边不能有空格
    • expr 10+10

    • expr 30/10

    • expr 30 * 3

      • 使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义
    • expr length “this is a test”

      • 计算str长度 14
    • expr substr “this is a test” 3 5

      • 抓取字符串
      • is is
    • expr index “sarasara” a

      • 抓取第一个字符数字串出现的位置 2

bc

  • echo “15+5” | bc

  • 小数数值计算

  • echo ‘scale=2; (2.777 - 1.4744)/1’ | bc

    • scale=2 设小数位,2 代表保留两位:
  • echo “sqrt(100)” | bc

var1=20
var2=3.1415
var3=$(echo "scale=4; $var1 * $var1" | bc)
  • clk_ask=$(echo “scale=6; $clk_ask/1000000” | bc)
  • offset= ( e c h o " (echo " (echo"rx_clk-$tx_clk" | bc)
  • obase=16;ibase=16; 设置输入和输出都为16进制,默认值为10
stateAll=${stateAll: 0-10: 10}

eval

cut

  • 指定位置提取

    • -c1-5
  • 指定分隔符提取

    • -d: -f1

paste

  • 与cut相反 是合并

tr

Linux tr 命令用于转换或删除文件中的字符。

tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

  • tr from-chars to-chars

  • tr -c -d -s [“string1_to_translate_from”][“string2_to_translate_to”] < input-file

  • cat testfile |tr a-z A-Z

    • 文件中的字符转成大写
  • -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

  • -d 删除 后边跟的所有单个字符

    • cat file | tr -d “Snail” > new_file
  • ^M 删除

    • cat file | tr -d “\r” > new_file

test

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi
  • -e 文件名 如果文件存在则为真
  • -d 文件名 如果文件存在且为目录则为真
    -f 文件名 如果文件存在且为普通文件则为真
  • Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。

wc

word count
wc -l #行数


Examples

查找两个不同类型文件

ls |grep -E "xls|xlsx"

只显示行号

FNR是行号
awk '/keyword/ {print FNR}' filename
awk '/class bus_slave/ {print FNR}' misc.svh



du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。
或者 du -sh * | sort -n


set 显示局部环境变量和全局环境变量
env 显示全局环境变量
局部变量只在该进程中可见;
创建全局变量:先创建一个局部变量,然后export;

$my_var = "aa"
$export my_var
$echo $my_var
unset my_var #删除
#设置PATH
echo $PATH
#引用原来的$PATH  :分割  添加新的
PATH=$PATH:/home/newpath/scripts
echo PATH
#这种PATH只能有效于退出/重启系统前  

linux启动会去读取
/etc/profile #系统主文件
$HOME/.bash_profile #针对各个用户
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile

环境变了持久化

  • 在/etc/profile.d目录下创建.sh文件;
  • 修改$HOME/.bashrc

数组变量

mytest = (one two three four)
echo =$mytest  #只显示one
#需要使用索引
echo $(mytest[2])  #three
echo $(mytest[*])
mytest[2] = seven

sort | uniq -c

排序

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值