我想使用一行Perl命令来更改Bash变量中的数据。我认为问题是Perl one liner没有收到数据中的管道。
我知道bash更改变量
即findString=${findString//\//\\/}
我很高兴让Perl也能工作。我不知道Perl所以保持简单。
要清楚,这两行不起作用: 我希望文本中的标签更改为\ t。我希望任何Unix行结束都改为\ n。
findString=$(cat "${findString}" | perl -0777pe 's/\t/\\t/g')
findString=$(cat "${findString}" | perl -0777pe 's/\n/\\n/g')
这是我的bash代码:
#!/bin/bash
#The idea here is to change tab to \n
# and line End to \n
# debug info
export PS4='+(${BASH_SOURCE}:${LINENO}):'
# trace all the lines
#set -o xtrace
echo "---------------------- start ----------------------------------------"
# string to change.
# chops off the last \n
read -d '' findString <<"EOFEOFEOF"
# Usage: /Users/mac/Sites/bithoist/commandLine/BitHoist/BitHoist-PPC-MacOS-X [options] input... < input > output
# Options and inputs may be intermixed
-stdin # Use standard input as input file
-offset nn # Offset next input file data by nn
EOFEOFEOF
findString=$(cat "${findString}" | perl -0777pe 's/\t/\\t/g')
findString=$(cat "${findString}" | perl -0777pe 's/\n/\\n/g')
echo "------------> findString of length ${#findString} is:"
echo -E "${findString}"
echo
答案 0 :(得分:2)
它应该有用。
以下是
$ echo Helloabtb | perl -0777pe 's/a/x/g'
Helloxbtb
$ myvar=`echo Helloabtb | perl -0777pe 's/a/x/g'`
$ echo $myvar
Helloxbtb
因此,如果它适用于echo
,则应与cat
一起使用。我建议在我的示例中使用上面显示的反引号,然后尝试。像
findString=`cat $findString | perl -0777pe 's/\t/\\t/g'`
也是最有可能的,cat
需要一个文件。因此,在您的情况下,echo
可能适合作为
findString=`echo $findString | perl -0777pe 's/\t/\\t/g'`
OR
findString=$(echo "$findString" | perl -0777pe 's/\t/\\t/g')
OR
command="echo $findString | perl -0777pe 's/\t/\\t/g'"
findString=eval($command)
答案 1 :(得分:1)
正如@chepner在评论中已经指出的那样,您希望使用echo
代替cat
。 cat
期望文件名为cat,因此它将$findString
视为文件名。