我有大量文本文件,其中包含诸如“BR”之类的愚蠢数据(BR 两边都有大于/小于符号,我已经从文件中删除了 BR,只需要逐行对其进行排序并删除重复项。我需要获取所有数据,每行都有自己的单个 xyz 域,将带有空格的行移动到各自的行中。
如果你已经喜欢了:
/temp/>$ cat temp.txt 243.abb.com www.243.abb.com mypassword.abb.com pdc.owc.abb.com pdc.owc.test.abb.com pdc.template.abb.com pdc.template.dev.abb.com ETC...
/temp/$> 某种脚本 tosort.sh temp.txt (这将创建一个新文件 temp.new.txt)
你让它看起来像这样:
/temp/>$ cat temp.new.txt 243.abb.com www.243.abb.com mypassword.abb.com pdc.owc.abb.com pdc.owc.test.abb.com pdc.template.abb.com pdc.template.dev.abb.com ETC....
答案1
由于您没有向我们展示文件中的实际内容(od -bc file.txt
将显示每个字节),我假设条目之间只有空格。
tr ' ' "\n" file.txt | grep -Ev '^$'
其工作原理是将所有空格改为换行符(LF
,0x0),然后删除所有空行。
答案2
一些选项:
用于
grep -o
在单独的行上输出每个非空白字符序列:grep -Eo '[^[:blank:]]+' temp.txt > temp.new.txt
使用 awk,以空格序列作为输入记录分隔符
awk 1 RS='[[:space:]]+' temp.txt > temp.new.txt
使用带有默认输入分隔符的 awk,但将输出字段分隔符设置为换行符(类似于 #1 的 awk 实现)
awk '{$1=$1}1' OFS='\n' temp.txt > temp.new.txt
使用 sed 将空白字符序列替换为换行符:
sed -E 's/[[:blank:]]+/\n/g' temp.txt > temp.new.txt
(可能是最有效的)用换行符替换空格,压缩重复
tr -s '[:space:]' '\n' < temp.txt > temp.new.txt