我正在尝试接收一个类似于以下内容的文件(但还有数百行):
#!/bin/bash -e
cd datafiles
mkdir ../done
for f in $(find . -type f); do
echo $f
mysql -h <myhost> -u <myuser> --password=<myuserpassword <mydb> -e "LOAD DATA LOCAL INFILE '${f}' INTO TABLE <mytable> ignore 1 lines"
mv $f ../done/
done
cd ..
123,000,“带空格的单词”的东西每行都不一样。我只是想把它展示为我需要的占位符。
如果我只需要获取每行的123,我怎么能忽略那里的其他东西呢?
以下是我的尝试:
123 000 words with spaces 123 123 123 words with spaces
123 000 and again words here 123 123 123 and words again
有没有办法跳过“000's”和“带空格的单词”这样的东西我只接受“123”?或者我只是以“糟糕”的方式接近这个。谢谢!
答案 0 :(得分:2)
您可以使用正则表达式去除行的第一部分。
String cleaned = in.nextLine().replace("^(\\d+\\s+)+([a-zA-Z]+\\s+)+", "");
^
表示模式从文本的开头(行的开头)开始
(\\d+\\s+)+
匹配一个或多个数字组,后跟空格。
([a-zA-Z]+\\s+)+
匹配一组或多组字母字符,后跟空格。
如果有标点符号或其他字符,您可能需要修改模式。如果您不熟悉正则表达式here,可以阅读更多相关内容。
答案 1 :(得分:1)
逐行抓取并在一个空格周围分割线并迭代字符串数组,只关注数组中的字符串是否符合您的要求
int countsOf123s = 0;
while (in.hasNextLine())
{
String[] words = in.nextLine().split(" "); //or for any whitespace do \\s+
for(String singleWord : words)
{
if(singleWord.equals("123"))
{
//do something
countsOf123s++;
}
}
}