paste(1)

• 本文约 307 字,阅读大致需要 1 分钟 | Development

这是一个处理文本的命令,之前一直没怎么用过,最近看 freebsd-update 的时候才知道有这么个玩意。

假设用 piconv 转换了一批 .txt 文件,并将其命名为对应的 .txt.new

ls *.srt | \
awk -F \\r '{ 
print "piconv -f gbk -t utf8 \"" $1 "\" > \"" $1 ".new\""
}'  | sh -x

(这个是个简单的例子,只考虑有空格,而没有考虑文件名中有换行、引号等情况;换行是为了排版方便)。

然后,想要把所有的 .txt.new 改名为 .txt,此时便可以用 paste

首先生成两个列表,old.listnew.list,分别包括转换前后的文件名:

find . -name '*.txt' | sed -e s/^/\"/g -e s/\$/\"/g | sort > old.list
find . -name '*.txt.new' | sed -e s/^/\"/g -e s/\$/\"/g | sort > new.list

然后用paste:

paste new.list old.list | sed -e s/^/mv\ /g | sh -x

是的,你应该发现,用和第一步类似的方法也可以让 awk 干一样的事情。 这里只是展示一下 paste(1) 的基本用法。