卷曲 - 使用grep

时间:2017-09-04 21:17:27

标签: curl search awk grep

我在这个curl脚本中相当新,我正在寻找一种方法,当我点击特定网站时粘贴来自代码的文本。

目前我有:

echo $a_opensite | grep -E -o 'value=\".*==.*' | awk '{print $1}' > 
                  /Users/MZComputer/Downloads/10Step/VIEWSTATE_file;

将以下值写入名为:

的文件中
VIEWSTATE_file****value="bdC7M0jCKxJNSfHjUVv+4MMt3/ysSLviYkIQnnpntK3qNCarg7H012UIllu+XBDepbWYWktNdf3EBgd3xd0...UVv"****

但是我可以使用文本value="来获取正确的令牌。但是,我不想在文件中包含value="....",只是想在引号中包含文本 - 不包括引号本身。

我能做到的任何想法?

2 个答案:

答案 0 :(得分:1)

使用以下行:

echo $a_opensite | grep -E -o 'value=\".==.' | awk '{print $1}' | sed 's/value="\([^"]*\)"/\1/' > /Users/MZComputer/Downloads/10Step/VIEWSTATE_file;

答案 1 :(得分:0)

假设使用GNU grep,我将使用其-P选项和Perl风格的lookbehind / lookahead表达式。例如:

$ echo 'foo value="something interesting" bar' | grep -Po '(?<=value=\").*?(?=\")'
something interesting

有趣的是:

  1. (?=\") - 这是 lookahead 表达式。它匹配空字符串iff后跟指定的正则表达式,在本例中为\"。在上面的示例中,它将在提供的输入结尾处" bar之前匹配空字符串。
  2. (?<=value=\") - 这是 lookbehind 表达式。它匹配空字符串iff前面有指定的正则表达式,在这种情况下value=\"在上面的例子中,它匹配something interesting之前的空字符串。
  3. .*?匹配任何字符序列非贪婪,也就是说,如果该行显示为value="stuff" garbage="more stuff",那么它只会与stuff匹配而不是stuff" garbage="more stuff
  4. 结合-o选项,这会将value="与下一个"之间的字符串隔离开。