Php 使用sed将文件拆分为两个文件
我有一个大约250米的文件,我想用 ubuntu中的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
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搜索你的整个表情呢?