Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用sed将文件拆分为两个文件_Php_Regex_Sed - Fatal编程技术网

Php 使用sed将文件拆分为两个文件

Php 使用sed将文件拆分为两个文件,php,regex,sed,Php,Regex,Sed,我有一个大约250米的文件,我想用 ubuntu中的sed命令 我希望拆分的行如下所示: DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log` 第二个文件应包含上述字符串。您可以使用此工具: pattern='DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`' csplit infile /"$pat

我有一个大约250米的文件,我想用 ubuntu中的sed命令

我希望拆分的行如下所示:

DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`
第二个文件应包含上述字符串。

您可以使用此工具:

pattern='DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`'
csplit infile /"$pattern"/
如果您真的想使用sed,可以分两步进行:

pattern='DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`'
sed -n "/$pattern/q;p" infile > outfile1
sed -n "/$pattern/,\$p" infile > outfile2
-n防止打印作为默认操作/$模式/q在到达模式行时立即退出,并且在到达模式行之前对每一行执行p

第二个命令只使用一个地址范围,从模式行到最后一个$。因为命令是双引号的,所以最后一行的$必须转义,\$

或者您可以使用awk进行单次传递:

pattern='DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`'
awk -v pattern="$pattern" '$0 == pattern { ++flag }
                           flag { print > "outfile2"; next }
                           { print > "outfile1" }' infile

第一个模式检查线是否与分割线匹配,如果匹配,则增加一个标志;第二行检查标志是否设置,如果设置,则打印到第二个输出文件并跳过最后一个模式/动作;如果未设置标志并将其打印到第一个输出行,则执行第三个操作。

php在这里做什么?抱歉,如果可以使用一些php命令而不是SED来完成,我正在尝试使用CS split来完成此操作-但我收到的错误类似于-$pattern='DROP TABLE if EXISTS core\u url\u rewrite create TABLE if not EXISTS core\u url\u rewrite'csplitcupolasd\u currentdb.sql/$pattern/csplit:/DROP TABLE IF EXISTS core\u url\u rewrite create TABLE IF NOT EXISTS core\u url\u rewrite/':match NOT found 265438046`@Joshi可能您发布的行中有打字错误。例如,`captcha_log`和CREATE TABLE之间真的没有空格吗?或者分号?好的,如果存在'core\u url\u rewrite',我运行grep命令-grep-c DROP TABLE,得到的结果为1。所以我也需要在cssplit中转义backticks````。好的,我运行命令cssplit的两种方式,即用反斜杠转义backticks,而不转义它。在这两种情况下,第一个文件是0字节,第二个文件是文件的完整大小。我肯定失踪了something@Joshi不,逃跑不是问题。如果你用grep搜索你的整个表情呢?