我有一个由线轴创建的文件。这个文件有由分隔符分隔的列:#@;
有没有办法在分隔符之间找到数据?我的意思是例如:
#@;Hello #@;World #@;!!!
我必须找到你好然后世界然后!!!。我试过这种方式但不起作用:
tp=${ENDFL##*@#}
HELLOSTRING=`printf '"%s"\n' "${tp%%#@;*}"`
有任何想法吗?谢谢
使用翻译命令:
echo "#@;Hello #@;World #@;!!!" | tr '#@;' '^' | tr -s '^'
输出:
Kaizen ~
$ echo "#@;Hello #@;World #@;!!!" | tr '#@;' '^' | tr -s '^'
^Hello ^World ^!!!
解释:
第一个 tr 替换了 '#@;' 分隔符 ^ ,但它做了三遍。
“#,@,;” 是三个单独的文字,因此它分别为所有三个子 ^
第二个 tr 将多个 ^ 的出现抑制为一个。
因此,您会得到一个以 ^ 分隔的输出为“^Hello ^World ^!!!”
对于您的文件,只需 cat 文件名,然后将其通过管道传输到 translate 命令,之后您可以使用 AWK、剪切或其他任何内容来根据需要进行格式化或提取。
如果你必须处理一堆线
sed -e 's/#@;//g' input.dat
查找分隔符之间的数据(假设您在变量中具有 建议的值tp=
)
echo "${tp/#@;/}"
如果您想使用零件
origIFS=$IFS # always kep the original $IFS save
IFS='§' # define a InputFieldSeparator which will not be used in your input
set ${tp//#@;/$IFS} # reduce separator to one char and set $1 ... based on that separator
IFS=$origIFS # and restore $IFS when you are done
echo "'$1' '$2' '$3' '$4'" # note that $1 is empty, it is before the first separator)