“我怎样才能跑?”;“确认”;在bash中,将输出保存到文件中?

“我怎样才能跑?”;“确认”;在bash中,将输出保存到文件中?,bash,grep,ack,Bash,Grep,Ack,下面的test.txt文件有两行 keyword 1, 2010-10-01 | 1 | 2 | 3 | 4 keyword 2, 2010-10-01 | 1 | 2 | 3 | 4 并希望查看关键字1和关键字2的。我称之为脚本 #!/bin/bash OUTPUTPATH=$1"/" JOB=$2 ID="_"$3".csv" for keyword in "${@:4}" do trKeyWord=$(echo "$keyword" | sed 's/ //g')

下面的test.txt文件有两行

keyword 1, 2010-10-01 | 1 | 2 | 3 | 4
keyword 2, 2010-10-01 | 1 | 2 | 3 | 4
并希望查看
关键字1
关键字2
的。我称之为脚本

#!/bin/bash

OUTPUTPATH=$1"/"
JOB=$2
ID="_"$3".csv"

for keyword in "${@:4}"
do
        trKeyWord=$(echo "$keyword" | sed 's/ //g')
        ack \""$keyword"\" $JOB > $OUTPUTPATH$trKeyWord$BSLD_ID
done
通过


输出文件
keyword1\u test.csv
keyword2\u test.csv
已创建,但它们是空的!问题一定是我如何使用
ack\”“$keyword”\“$JOB
,因为只运行此命令会得到一个空结果。

好的,伙计们,这是最后的(工作)答案:


好了,伙计们,这是最后的(有效的)答案:


为什么要将外部双引号反斜杠?如果我只使用“$keyword”,它将执行
ack keyword 1 test.txt
,但我想要
ack“keyword 1”test.txt
@tenticon不,这是错误的。前三行中的引号是向后的。如果需要引用变量,而不是固定字符串:
OUTPUTPATH=“$1”/;JOB=“$2”;ID=\$3.csv
。但是你应该使用小写的变量名;所有大写变量都用于系统。此外,您可以删除带有
${keyword/}
的空格,无需外部命令。为什么要将外部双引号反斜杠?如果我只使用“$keyword”,它将执行
ack keyword 1 test.txt
,但我需要
ack”keyword 1 test.txt
@tenticon no,那是错误的。你在前三行的引语有点倒转。如果需要引用变量,而不是固定字符串:
OUTPUTPATH=“$1”/;JOB=“$2”;ID=\$3.csv
。但是你应该使用小写的变量名;所有大写变量都适用于系统。此外,您可以删除带有
${keyword/}
的空格,无需外部命令。呜呜,看来我的答案是错误的,而这一个是正确的,恭喜您。请务必引用您的变量。如果说,
outputpath
myoutput dir
,那么重定向将无法按您想要的方式工作。对于
作业
和其他变量也有类似的担忧,看来我的答案是错误的,而这一个是正确的,恭喜你。一定要引用你的变量。如果说,
outputpath
myoutput dir
,那么重定向将无法按您想要的方式工作。
作业
和其他变量的类似问题
bash script.sh /home/username/ test.txt test "keyword 1" "keyword 2"
outputpath="$1"/
job="$2"
id=_"$3".csv
for keyword in "${@:4}"
do
  trKeyWord=${keyword// }
  ack "$keyword" $job > $outputpath$trKeyWord$id
done