我正在尝试找到一种从生成的日志文件中提取脚本的方法。
我被困在一个命令调用多个文件的地方,并且脚本用尾随的“\”分隔它们以保证行的连续性。例如,示例脚本是:
my_command -option \
file1 \
file2 \
file3
my_command2 .. ..
看起来很简单,但不知何故,这个伎俩并没有打到我这一点。 请帮忙。 日志中的每一行都以命令的特定标识符开头,如:
:: Script_Command:: my_command -option \
:: file1 \
:: file2 \
:: file3
:: Info lines....
:: More info lines ...
:: Script_Command:: my_command2 ... ..
:: Info lines ...
所以我用过:
awk '/Script_Command/ {print }'
然后我尝试将它与if条件结合使用:
awk '/Script_Command/ {print substr(length(),1)}'
但整个事情并没有落实到位。 请帮忙。
编辑: 我得到的最接近的是:
awk '{if ($NF=="\\" || == "Script_Command::") print ;}' file
它仍然保留file3行,因为它与任何内容都不匹配。
纯粹的意图是: 1.当Script_Command匹配时,打印行。 2.匹配“\”时,打印下一行。 3.两者匹配时,打印行和下一行。
答案 0 :(得分:1)
您可以使用sed:
sed -n '/Script_Command/ {:a;/\\$/!be;N;ba;:e;p;}'
击穿
# -n disables auto printing.
sed -n '/Script_Command/ { # Match regex
:a # Define label 'a'
/\\$/!be # Goto 'e' unless pattern space ends with \
N # Append next line to pattern space
ba # Goto 'a'
:e # Define label 'e'
p # Print pattern space
}'
如果您想要读取以斜杠结尾的行,后跟零个或多个空格,则可以将[[:space:]]*
添加到/\\$!be
:
/\\[[:space:]]*$/!be
答案 1 :(得分:0)
如果每行继续以::
开头,可以使用这样的awk:
awk '!/^::/ { p = 0 } # Set p = 0 if line does not start with ::
/Script_Command/{ p = 1 } # Set p = 1 when line contains Script_Command
p' # Print if p is truly
答案 2 :(得分:0)
我终于使用以下命令:
public function getGymByName($query_string)
{
$query_string=mysql_real_escape_string($query_string);
$query=$this->db->query("select * from gym_members_table where member_title like '%$query_string%'");
return $query->result_array();
}
</code>