免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2611 | 回复: 9
打印 上一主题 下一主题

请问怎样取出指定行的部分内容 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-13 20:23 |只看该作者 |倒序浏览
文件格式类似如下,有几百行
if ($compid == "") $compid = $sessionMgr->getValue("CompId");
$secrole = $sessionMgr->getValue("usecrole");
$cntid = $sessionMgr->getValue("ucntid");

$strError = "";
$recSetROLES = null;
$recSet= null;
$recSetSOWO= null;
$recSetLocations= null;

$dbConn = GetDBConnection();

$strSQL = "SELECT cust_id, cust_code, cust_name, it_name, TO_CHAR(cust_start_date, '" . $tz_date_format . "') cust_start_date, ";
$strSQL .= "TO_CHAR(cust_end_date, '" . $tz_date_format . "') cust_end_date, cust_logo_url, cust_homepage_url, ";
$strSQL .= "cust_tz_id, tz_code || ' - ' || tz_name tz_name, servc.comp_code comp_code_serviced_by, soldc.comp_code comp_code_sold_b
y, ";
$strSQL .= "cust_stats_enable_5min, cust_stats_site, cust_proactive_monthday, ";
$strSQL .= "TO_CHAR(cust_monitor_start_date, '" . $tz_date_format . "') cust_monitor_start_date, ";
$strSQL .= "TO_CHAR(cust_monitor_end_date, '" . $tz_date_format . "') cust_monitor_end_date, ";
$strSQL .= "cust_dns_domain, NVL(servc.comp_name,'') comp_name_serviced_by, soldc.comp_name comp_name_sold_by, ";
$strSQL .= "comp.comp_address1, comp.comp_address2, comp.comp_address3, comp.comp_address4, comp.comp_city, comp.comp_state, ";
$strSQL .= "comp.comp_zip, comp.comp_country, comp.comp_partner, sl_level_name, ";
$strSQL .= "cntc.cnt_first_name || ' ' || cntc.cnt_last_name cnt_created, TO_CHAR(comp.comp_created_date, '" . $tz_full_date_format
. "') comp_created_date,  ";
$strSQL .= "cntu.cnt_first_name || ' ' || cntu.cnt_last_name cnt_updated, TO_CHAR(comp.comp_updated_date, '" . $tz_full_date_format
. "') comp_updated_date, ";
$strSQL .= "DECODE(cust_proactive_weekday, 'sun', 'Sunday', 'mon', 'Monday', 'tue', 'Tuesday', 'wed', 'Wednesday', 'thu', 'Thursday'
, 'fri', 'Friday', 'sat', 'Saturday', 'None') cust_proactive_weekday, ";
$strSQL .= "DECODE(cust_proactive_biweekday, 'sun', 'Sunday', 'mon', 'Monday', 'tue', 'Tuesday', 'wed', 'Wednesday', 'thu', 'Thursda
y', 'fri', 'Friday', 'sat', 'Saturday', 'None') cust_proactive_biweekday ";
$strSQL .= "FROM ctradm.customers, sv_time_zones, sv_companies servc, sv_companies soldc, sv_companies comp, sv_industry_types, ";
$strSQL .= "sv_service_levels, sv_contacts cntc, sv_contacts cntu ";
$strSQL .= "WHERE cust_tz_id = tz_id AND cust_id = comp.comp_id AND cust_cust_id_serviced_by = servc.comp_id (+) ";
$strSQL .= "AND cust_cust_id_sold_by = soldc.comp_id (+) AND comp.comp_it_id = it_id (+) AND sl_id(+) = cust_service_level ";
$strSQL .= "AND cntc.cnt_id = comp.comp_cnt_id_created AND cntu.cnt_id = comp.comp_cnt_id_updated AND cust_id = $compid ";
.............................

现在我只希望将类似于以下的语句变为
$strSQL = "SELECT cust_id, cust_code, cust_name, it_name, TO_CHAR(cust_start_date, '" . $tz_date_format . "') cust_start_date, ";
SELECT cust_id, cust_code, cust_name, it_name, TO_CHAR(cust_start_date, '" . $tz_date_format . "') cust_start_date,

也就是要将$strSQL 开头的所有行找出来,然后再取$strSQL = "和 ";  之间的内容

请问各位高手如何写

[ 本帖最后由 yuantong 于 2008-3-13 21:27 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-03-13 22:42 |只看该作者
grep '^\$strSQL ' filename | awk -F "strSQL .= |;" '{print $2}'

[ 本帖最后由 WinnerBoy 于 2008-3-13 22:45 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-03-13 22:44 |只看该作者
sed -n 's/\(^\$strSQL\) = "\(.*\)";/\1 = "\2";\n\2/gp'

不知道上面可否?
没怎么读懂楼主的意思,$strSQL .=  后面的语句要不要?

[ 本帖最后由 galford433 于 2008-3-13 22:46 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-03-13 23:03 |只看该作者
sed 's/^[$]strSQL.*"\(.*\)";/\1/'

论坛徽章:
0
5 [报告]
发表于 2008-03-13 23:05 |只看该作者
如果想要$strSQL .=  后面的语句就加个条件判断。如下:

sed -n '/$strSQL =/s/\(^\$strSQL\) = "\(.*\)";/\1 = "\2";\n\2/gp;/$strSQL .=/s/^\$strSQL .= "\(.*\)";/\1/gp'

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2008-03-14 09:11 |只看该作者
原帖由 galford433 于 2008-3-13 23:05 发表
如果想要$strSQL .=  后面的语句就加个条件判断。如下:

sed -n '/$strSQL =/s/\(^\$strSQL\) = "\(.*\)";/\1 = "\2";\n\2/gp;/$strSQL .=/s/^\$strSQL .= "\(.*\)";/\1/gp'



非常感谢帮忙. 我是需要将$strSQL 开头的内容全要的,包括$strSQL .= 和$strSQL = 开始的 行

现在按你的语句,执行结果如下.
$strSQL = "SELECT cust_id, cust_code, cust_name, it_name, TO_CHAR(cust_start_date, '" . $tz_date_format . "') cust_start_date, ";
SELECT cust_id, cust_code, cust_name, it_name, TO_CHAR(cust_start_date, '" . $tz_date_format . "') cust_start_date,

TO_CHAR(cust_end_date, '" . $tz_date_format . "') cust_end_date, cust_logo_url, cust_homepage_url,
cust_tz_id, tz_code || ' - ' || tz_name tz_name, servc.comp_code comp_code_serviced_by, soldc.comp_code comp_code_sold_by,
cust_stats_enable_5min, cust_stats_site, cust_proactive_monthday,
TO_CHAR(cust_monitor_start_date, '" . $tz_date_format . "') cust_monitor_start_date,
TO_CHAR(cust_monitor_end_date, '" . $tz_date_format . "') cust_monitor_end_date,
cust_dns_domain, NVL(servc.comp_name,'') comp_name_serviced_by, soldc.comp_name comp_name_sold_by,
comp.comp_address1, comp.comp_address2, comp.comp_address3, comp.comp_address4, comp.comp_city, comp.comp_state,
comp.comp_zip, comp.comp_country, comp.comp_partner, sl_level_name,
cntc.cnt_first_name || ' ' || cntc.cnt_last_name cnt_created, TO_CHAR(comp.comp_created_date, '" . $tz_full_date_format . "') comp_created_date,  
cntu.cnt_first_name || ' ' || cntu.cnt_last_name cnt_updated, TO_CHAR(comp.comp_updated_date, '" . $tz_full_date_format . "') comp_updated_date,
DECODE(cust_proactive_weekday, 'sun', 'Sunday', 'mon', 'Monday', 'tue', 'Tuesday', 'wed', 'Wednesday', 'thu', 'Thursday', 'fri', 'Friday', 'sat', 'Saturday', 'None') cust_proactive_weekday,
DECODE(cust_proactive_biweekday, 'sun', 'Sunday', 'mon', 'Monday', 'tue', 'Tuesday', 'wed', 'Wednesday', 'thu', 'Thursday', 'fri', 'Friday', 'sat', 'Saturday', 'None') cust_proactive_biweekday
FROM ctradm.customers, sv_time_zones, sv_companies servc, sv_companies soldc, sv_companies comp, sv_industry_types,
sv_service_levels, sv_contacts cntc, sv_contacts cntu
WHERE cust_tz_id = tz_id AND cust_id = comp.comp_id AND cust_cust_id_serviced_by = servc.comp_id (+)
AND cust_cust_id_sold_by = soldc.comp_id (+) AND comp.comp_it_id = it_id (+) AND sl_id(+) = cust_service_level
AND cntc.cnt_id = comp.comp_cnt_id_created AND cntu.cnt_id = comp.comp_cnt_id_updated AND cust_id = $compid

这两句重复了,我想不要第一句

论坛徽章:
0
7 [报告]
发表于 2008-03-14 09:16 |只看该作者

回复 #6 yuantong 的帖子

sed -n '/$strSQL =/s/^\$strSQL = "\(.*\)";/\1/gp;/$strSQL .=/s/^\$strSQL .= "\(.*\)";/\1/gp'

需求简化了,更简单点:

sed -n 's/^\$strSQL [.]\{0,1\}= "\(.*\)";/\1/gp'

[ 本帖最后由 galford433 于 2008-3-14 09:43 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2008-03-14 10:21 |只看该作者
那对于这样格式的,上面的语句好像不行
function GetAllData() {
        global $dbConn, $recSetSL, $recSetTZ, $recSetROLES, $recSetIT, $recSetCNT;
        global $recSetCOMP, $comp_start_date, $tz_ora_tzname;

        // Get all service levels. 02/04/03 he
        $strSQL = "SELECT sl_id,sl_level_name ";
        $strSQL .= "FROM svadm.service_levels ";
        $strSQL .= "ORDER BY upper(sl_id) ";

        $recSetSL = $dbConn->Execute($strSQL);

        // Get all time zones.
        $strSQL = "SELECT tz_id, tz_code, tz_name ";
        $strSQL .= "FROM sv_time_zones ";
        $strSQL .= "ORDER BY upper(tz_code) ";

论坛徽章:
0
9 [报告]
发表于 2008-03-14 10:28 |只看该作者
自都 说出思路了 呵呵 看看 awk 基础 自己就能搞定,
很简单了吧
awk 'BEGIN{FS="[ \"]+"}/strSQL/{$1=$2=$NF="";print}'

论坛徽章:
0
10 [报告]
发表于 2008-03-14 11:25 |只看该作者
原帖由 yuantong 于 2008-3-14 10:21 发表
那对于这样格式的,上面的语句好像不行
function GetAllData() {
        global $dbConn, $recSetSL, $recSetTZ, $recSetROLES, $recSetIT, $recSetCNT;
        global $recSetCOMP, $comp_start_date, $tz ...


……
先看看新手导航里的sed吧,这个里面$strSQL不再开头肯定不行了,把^去掉就可以了。

而且楼上也给了awk的方法了。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP