免费注册 查看新帖 |

Chinaunix

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

求教:如何替换每行中偶数位置的字符串 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-14 09:24 |只看该作者 |倒序浏览
有个档案,要加上一些标签,为了便于处理,将所有的标签都输入成了 "<tag>"格式,现在想将偶数位置的标签替换成"</tag>"请问可以做到吗?
例如:
The <u>heading<u>, <u>inside address<u>, <u>greeting<u>, <u>body<u>, <u>complimentary closing<u> and <u>signature<u>.

替换成
The <u>heading</u>, <u>inside address</u>, <u>greeting</u>, <u>body</u>, <u>complimentary closing</u> and <u>signature</u>.

论坛徽章:
0
2 [报告]
发表于 2012-01-14 10:47 |只看该作者
我搜到了这个资料,但我修改不好,哪位达人帮帮我,谢谢
http://www.cn-dos.net/forum/view ... =%E5%81%B6%E6%95%B0

a.txt
aaaaaaaaaaaaa
输出为
ababababababab
即 把所有在偶数位置的a换成b~
code 01:
echo off&setlocal enabledelayedexpansion
set n=-2&set b=b
:begin
set /a n+=2
for /f "delims=" %%i in (a.txt) do (
    set a=%%i&set a=!a:~%n%!
    if "!a:~1!"=="" set "b="
    if not "!a!"=="" (
       set str=!a:~,1!
       set var=!var!!str!!b!
       goto begin
    )
    echo !var!
)
pause>nul&goto :eof

code 02:
@echo off
for /f "delims=" %%a in (a.txt) do (
  set str=%%a&set "num="
  call :loop
)
pause
:loop
set num=%num%%str:~0,1%b
set str=%str:~2%
if not defined str echo %num%&goto :eof
goto loop

可怎么修改才能使用我的要求呢?

论坛徽章:
0
3 [报告]
发表于 2012-01-14 11:44 |只看该作者
这个问题我用Foxpro 解决了,导入Foxpro 的memo字段,然后根据 mline 取每行,再用 strtran(), occurs(), mod() 即可。
没办法,shell 脚本对我来说太难了,只会基本的,最简单的。这个问题放这里大家研究吧!
谢谢这个论坛,让我学习了很多知识

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2012-01-14 12:56 |只看该作者
本帖最后由 yinyuemi 于 2012-01-14 13:43 编辑

回复 1# rzhang168
  1. awk -vRS='<u>' 'ORS=(++i%2?RT:gensub("<","</",1,RT))'' file
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-01-14 14:05 |只看该作者
本帖最后由 rzhang168 于 2012-01-14 14:12 编辑

回复 4# yinyuemi


    謝謝yinyuemi的解答,多了一個“ ‘ ”,結果正確,但是最後的句號 " . " 丟失了。

论坛徽章:
0
6 [报告]
发表于 2012-01-14 14:19 |只看该作者
sed 's@<u>\([^<]*\)<u>@<u>\1</u>@g' data

论坛徽章:
0
7 [报告]
发表于 2012-01-14 14:23 |只看该作者
回复 6# jiejie455


    呵呵,謝謝幫忙,結果完全正確!sed 裏面 "@" 看著好高深啊,路漫漫其修遠兮,吾將上下而求索!

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2012-01-14 14:33 |只看该作者
回复 5# rzhang168
  1. awk -vRS='<u>' '(ORS=(++i%2?RT:gensub("<","</",1,RT)))||1'
复制代码

论坛徽章:
0
9 [报告]
发表于 2012-01-14 14:37 |只看该作者
回复 8# yinyuemi


    謝謝,經測試,這回完全正確了。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
10 [报告]
发表于 2012-01-14 15:57 |只看该作者
回复 7# rzhang168


只是把s///结构中的/改成了@而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP