我想使用一行 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