linux其他常用命令


大小写转换

tr

$ echo file | tr a-z A-Z
FILE

$ echo FILE | tr A-Z a-z
file

$ tr [:lower:] [:upper:]
$ tr [:upper:] [:lower:]

sed

$ sed 's/[a-z]/\U&/g'
$ sed 's/[A-Z]/\L&/g'

替换字符串

example1 fasta DNA > RNA

sed 's/原字符串/目标字符串/g' file

批量替换多文本中的字符串

sed -i "s/原字符串/目标字符串/g" `grep 原字符串 -rl 需要批量替换的文件或文件夹目录`

windows 到 linux,行后缀的处理

将在 Windows 下创建的文本文件传输到 Linux 上时,要注意二者行后缀不同 (windows \n\r, linux \n)。
忽略这一点,往往会导致一些后续操作出现莫名其妙的问题。
通过 vim -b 或者 cat -A 文件可以看到每行后会有 ^M
搜罗了以下几种方法:

  • tr :

    tr -d '\r' ## 删除 \r
  • sed

    sed 's/^M$//g' filename > tmp_filename

    使用sed 工具:需要注意打^M时应输入Ctrl+v+m,长按Ctrl依次点击v和m键,而不是数字6上的^符号。
    reference

  • dos2unix (if installed)

  • vim

    • 行数不多,直接删除^M
    • 命令模式下输入 :set fileformat=unix

xargs

-I

指定每一项命令行参数的替代字符串

$ cat foo.txt
one
two
three

$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one 
two
three

more options

echo

常用的参数

-e

  • 启动反斜杠转义解释,如将 \n 解释为换行,不设置 -e,会直接打印 \n

rename

mvrename 都有重命名的功能,但是 mv 只能对单个文件重命名,而 rename 则可以实现批量重命名
Linux 中 rename 有两个版本(C and perl), 详见linux中mv和rename的区别

C 版本的 rename 格式就是:

rename from to file
  • from, 修改什么名字
  • to, 改成什么名字
  • file, 对什么文件修改

example:

# change "txt" suffix into bed for all .txt file.
rename txt bed *.txt

注意:上述替换,只会发生在第一个匹配的字符串,所以感觉安装个 perl 版本的 rename 很舒服?

缺点是无法实现循环,按标号重命名的目的。

perl 版本的好处就是可以使用正则表达式

文件/文件夹判断

判断文件是否存在

if [ ! -f "$file" ]; then echo "file not exist"; fi

判断文件是否为空

if [ ! -s "$file" ]; then echo "file is NULL"; fi
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 判断对象是否存在
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 判断对象是否存在,并且可写
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新
-ot 判断file1是否比file2旧

搜索进程


文章作者: 梁绍波
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 梁绍波 !
评论
  目录