0

我有一个由线轴创建的文件。这个文件有由分隔符分隔的列:#@; 有没有办法在分隔符之间找到数据?我的意思是例如:

#@;Hello #@;World #@;!!!

我必须找到你好然后世界然后!!!。我试过这种方式但不起作用:

tp=${ENDFL##*@#}
          HELLOSTRING=`printf '"%s"\n' "${tp%%#@;*}"`

有任何想法吗?谢谢

4

2 回答 2

1

使用翻译命令:

  echo "#@;Hello #@;World #@;!!!"  | tr '#@;' '^' | tr -s '^' 

输出:

 Kaizen ~
 $ echo "#@;Hello #@;World #@;!!!"  | tr '#@;' '^' | tr -s '^'
   ^Hello ^World ^!!!

解释:

第一个 tr 替换了 '#@;' 分隔符 ^ ,但它做了三遍。

“#,@,;” 是三个单独的文字,因此它分别为所有三个子 ^

第二个 tr 将多个 ^ 的出现抑制为一个。

因此,您会得到一个以 ^ 分隔的输出为“^Hello ^World ^!!!”

对于您的文件,只需 cat 文件名,然后将其通过管道传输到 translate 命令,之后您可以使用 AWK、剪切或其他任何内容来根据需要进行格式化或提取。

于 2013-06-01T03:02:47.413 回答
0

如果你必须处理一堆线

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)
于 2017-04-16T12:43:53.303 回答