我正在使用Git Bash以递归方式查找旧版网站中的所有文件扩展名。当我将它传递给文件时,我想在文件扩展名前面添加换行符和句点。
find . -type f -name "*.*" | grep -o -E "\.[^\.]+$" | grep -o -E "[[:alpha:]]{1,12}" | awk '{print tolower($0)}' | sort -u
答案 0 :(得分:1)
你有不同的方式 如果您不想更改现有命令,我很想使用
printf ".%s\n" $(find . -type f -name "*\.*" | grep -o -E "\.[^\.]+$" |
grep -o -E "[[:alpha:]]{1,12}" | awk '{print tolower($0)}' | sort -u ) # Wrong
这是不正确的。当文件扩展名有空格(如example.with space
)时,它将被拆分为不同的行
你的命令已经将每个输出输出到不同的行,所以你可以在| sed 's/^/./'
的每一行之前加一个点
您可以跳过管道中的命令。你可以让awk
用
find . -type f -name "*\.*" | grep -o -E "\.[^\.]+$" | grep -o -E "[[:alpha:]]{1,12}" | awk '{print "." tolower($0)}' | sort -u
或者你可以让sed
加点,GNU sed也会以小写字母转换。
在最后一个命令中,我跳过12个字符上的grep
,我认为它的工作方式与你不同:
echo test.qqqwwweeerrrtttyyyuuuiiioooppp | grep -o -E "\.[^\.]+$" | grep -o -E "[[:alpha:]]{1,12}"
为每一行添加第二个换行符可以用不同的方式完成
当您拥有awk
命令时,请使用awk
和sort
并使用
awk '{print "." tolower($0) "\n"}'
或者在管道末尾添加换行符:sed 's/$/\n/'
。