shell如何实现每个字符前都加\

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
kashu
帖子: 451
注册时间: 2014-02-07 17:31
系统: Xubuntu 14.04.5 64位

shell如何实现每个字符前都加\

#1

帖子 kashu » 2016-01-28 21:11

有这么一行字符串:

代码: 全选

第10话 累得像条"狗"-XMTMzMzgwNzY2OA_part1.txt
我想让这行字符串中每一个字符前面都加上\

效果如下:

代码: 全选

\第\1\0\话\ \累\得\像\条\"\狗\"\-\X\M\T\M\z\M\z\g\w\N\z\Y\2\O\A\_\p\a\r\t\1\.\t\x\t
请问在shell环境下如何实现?

要求:实现的代码越短越好(如果一条命令能实现最好了)。


OS: Xubuntu 14.04.5 LTS 64-bit
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 12GB DDR3 1333MHz
128GB SSD + 2TB HDD
神舟优雅A480B-I5B 购于 2012.08

YouTube频道:https://www.youtube.com/channel/UCGSPXZ ... DuDYX8L6Qg
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: shell如何实现每个字符前都加\

#2

帖子 自由建客 » 2016-01-28 21:25

代码: 全选

s/\(.\)/\\\1/g
头像
kashu
帖子: 451
注册时间: 2014-02-07 17:31
系统: Xubuntu 14.04.5 64位

Re: shell如何实现每个字符前都加\

#3

帖子 kashu » 2016-01-28 21:29

自由建客 写了:

代码: 全选

s/\(.\)/\\\1/g
不行,这只加了一个\而已
kashu:/tmp$ echo '第10话 累得像条"狗"-XMTMzMzgwNzY2OA_part1.txt' | sed -n 's/\(.\)/\\\1/p'
\第10话 累得像条"狗"-XMTMzMzgwNzY2OA_part1.txt


OS: Xubuntu 14.04.5 LTS 64-bit
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 12GB DDR3 1333MHz
128GB SSD + 2TB HDD
神舟优雅A480B-I5B 购于 2012.08

YouTube频道:https://www.youtube.com/channel/UCGSPXZ ... DuDYX8L6Qg
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: shell如何实现每个字符前都加\

#4

帖子 vickycq » 2016-01-28 21:30

代码: 全选

a="第10话 累得像条"狗"-XMTMzMzgwNzY2OA_part1.txt"
for i in `seq 1 $((${#a} - 1))`; do b="$b${a:i:1}\\"; done
echo $
上次由 vickycq 在 2016-01-28 21:35,总共编辑 1 次。
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
头像
kashu
帖子: 451
注册时间: 2014-02-07 17:31
系统: Xubuntu 14.04.5 64位

Re: shell如何实现每个字符前都加\

#5

帖子 kashu » 2016-01-28 21:34

得到的结果不对
kashu:/tmp$ echo $b
1\ 0\ 话\ \ 累\ 得\ 像\ 条\ 狗\ -\ X\ M\ T\ M\ z\ M\ z\ g\ w\ N\ z\ Y\ 2\ O\ A\ _\ p\ a\ r\ t\ 1\ .\ t\ x\ t\ \ 1\ 0\ 话\ \ 累\ 得\ 像\ 条\ 狗\ -\ X\ M\ T\ M\ z\ M\ z\ g\ w\ N\ z\ Y\ 2\ O\ A\ _\ p\ a\ r\ t\ 1\ .\ t\ x\ t\ \


OS: Xubuntu 14.04.5 LTS 64-bit
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 12GB DDR3 1333MHz
128GB SSD + 2TB HDD
神舟优雅A480B-I5B 购于 2012.08

YouTube频道:https://www.youtube.com/channel/UCGSPXZ ... DuDYX8L6Qg
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: shell如何实现每个字符前都加\

#6

帖子 vickycq » 2016-01-28 21:37

kashu 写了:得到的结果不对

代码: 全选

a="第10话 累得像条"狗"-XMTMzMzgwNzY2OA_part1.txt"
for i in `seq 0 $((${#a} - 1))`; do b="$b\\${a:i:1}"; done
echo $b
\第\1\0\话\ \累\得\像\条\狗\-\X\M\T\M\z\M\z\g\w\N\z\Y\2\O\A\_\p\a\r\t\1\.\t\x\t
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
头像
kashu
帖子: 451
注册时间: 2014-02-07 17:31
系统: Xubuntu 14.04.5 64位

Re: shell如何实现每个字符前都加\

#7

帖子 kashu » 2016-01-28 21:39

抱歉,原来这样可以的,谢谢!

echo '第10话 累得像条"狗"-XMTMzMzgwNzY2OA_part1.txt' | sed -n 's/\(.\)/\\\1/gp'


OS: Xubuntu 14.04.5 LTS 64-bit
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 12GB DDR3 1333MHz
128GB SSD + 2TB HDD
神舟优雅A480B-I5B 购于 2012.08

YouTube频道:https://www.youtube.com/channel/UCGSPXZ ... DuDYX8L6Qg
回复