如何在一组文件中搜索字符串的任何部分?

时间:2014-10-06 18:19:15

标签: bash search awk find

我想要做的就是在文件目录中搜索字符串的任何部分。以下是处理此问题的代码部分:

(input is set through user input)

input2=$(eval find . -name "$input" -print | sed -n 1p) #Using find to search for the file I need to read

... (Checking the file I 'found' actually exists)

out=$(eval $(shuf -n 1 "$input2")) #Shuffle it randomly

echo "$out" #Echo the output

如果我的文件“日期”包含内容date "+%A %d %B %Y",我可以输入“日期”并获得预期结果,但“日期”会失败

find: paths must precede expression: is 
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

解决此问题的最简单方法是什么?

修改

我没有多尝试,因为我不知所措。我在搜索字符串中尝试过通配符,但它们根本不起作用。以下是源代码的整个输入到输出部分:

while true; do

  echo -n ">"
  read input
  input=${input,,}

  echo "[DEBUG]: Recieved $input"

  echo "[IO]: Accessing database"

  input2=$(eval find . -name "$input" -print | sed -n 1p) || out="WARNING: Input/Output Error{TYPE=IO.GENERAL, VALUE=$input2}"

  echo "[INPUT2]: Recieved $input2"

  if [ ! -f "$input2" ]
  then
    input2="./db/unknowncommand"
  fi

  #out=$(<"db/$input") || out="WARNING: Input/Output ERROR" #Old 'just print whatever is in the file approach

  out=$(eval $(shuf -n 1 "$input2")) || out="WARNING: Input/Output ERROR{TYPE=IO.GENERAL, VALUE=$input}" #Random output

  echo "$out"
  ./JAISpeak "$out" #A small text-to-speech program I made

done

1 个答案:

答案 0 :(得分:0)

对于“在文件名中查找字符串的任何部分”部分,我会这样做:

input2=$(for partname in ${input}; do find . -name "${partname}" -print ; done)

这将匹配它可以发生的每一次事件...... 如果你只需要第一次出现(很奇怪,但是嘿,它与$ PATH有点相同):

input2=$(for partname in ${input}; do find . -name "${partname}" -print ; done | head -1)

请注意,我故意使用${input}而不是"${input}":我想将$ {input}中的每个单词分开并逐个循环遍历每个单词。

我让你修改程序的其余部分^^(我需要去......)