创建或清空一个文件 $ > filename 上面命令使用了输出重定向操作符 >:打开文件进行操作。如果文件不存在,创建文件,如果文件存在,则清空文件。上面命令没有重定向任何内容,所以为空。 如果你想用指定内容替换文件内容,可以使用如下命令: $ echo "something you want to write" > filename filename文件的内容为 something you want to write。
在文件为追加内容 $ echo "something that you want to append to file" >> filename 上面命令使用了输出重定向操作符 >>:在文件尾写入内容。如果文件不存在则创建文件。写入的文件内容前有新行符(n),如果你不想要n,可以指定-n参数,如下: $ echo -n "fuck_the_gfw" >> file
读入文件的第一行并存入到一个变量中 $ read -r line < filename $ echo $line # 输出filename文件的第一行 read命令:从标准输入中读取一行放入到line里。<:重定向文件内容到标准输入。-r:读取raw数据。 另一种写法: $ line=$(head -1 filename) 同: $ line=`head -1 filename`
一行一行的读取文件内容 $ while read -r line; do # 用 $line 做点什么 done < filename 如果你不想用<,可以用管道: $ cat file | while read -r line; do echo $line done
随机读取文件中的一行数据 $ read -r random_line < <(shuf filename) 上面用到了shuf外部命令(generate random permutations)。 下面借助sort命令: $ read -r random_line < <(sort -R filename) 同: $ random_line=$(sort -R filename | head -1)
获得文件大小 $ size=$(wc -c < filename) $ echo $size
从文件路径中提取文件名 假如你有一个字符串/path/to/filename.py,怎么获得文件名filename.py。 $ path=/path/to/filename.py $ filename=${path##*/} $ echo $filename 上面用到了参数扩展 ${var##pattern},使用pattern试图匹配path。
从文件路径中提取目录 $ path=/path/to/filename.py $ dirname=${path%/*} 上面用到了参数扩展 ${var%pattern}。
快速拷贝一个文件 假如我们要拷贝/path/to/file 到 /path/to/file_copy,我们通常的写法是: $ cp /path/to/file /path/to/file_copy 简便写法,可以用{…}表达式: $ cp /path/to/file{,_copy} 同理,mv移动文件可以用如下命令: $ mv /path/to/file{,_old} |