Bash换行符

时间:2018-02-01 16:23:22

标签: bash

我正在使用Git Bash以递归方式查找旧版网站中的所有文件扩展名。当我将它传递给文件时,我想在文件扩展名前面添加换行符和句点。

find . -type f -name "*.*" | grep -o -E "\.[^\.]+$" | grep -o -E "[[:alpha:]]{1,12}" | awk '{print tolower($0)}' | sort -u

1 个答案:

答案 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也会以小写字母转换。

找到。 -type f -name" " | sed -r' s /。。([^。] )$ /。\ L \ 1 /' | sort -u

在最后一个命令中,我跳过12个字符上的grep,我认为它的工作方式与你不同:

echo test.qqqwwweeerrrtttyyyuuuiiioooppp | grep -o -E "\.[^\.]+$" | grep -o -E "[[:alpha:]]{1,12}"

为每一行添加第二个换行符可以用不同的方式完成 当您拥有awk命令时,请使用awksort并使用

awk '{print "." tolower($0) "\n"}'

或者在管道末尾添加换行符:sed 's/$/\n/'