如何从单词中删除字母 X?
How do I cut letter X out of a word?
我需要从单词中删除字母 X:
例如:我需要从 Star Wars 中删除第一个字母,从 munich 中删除第四个字母,...
1 star wars
4 munich
5 casino royale
7 the fast and the furious
52 a fish called wanda
到
tar wars
munch
casio royale
the fat and the furious
a fish called wanda
我已经用 cut 试过了,但是没用。
这是我的命令:
sed 's/^\([0-9]*\) \(.*\)/ echo | cut -c /'
所以它给了我这个输出:
echo star wars | cut -c 5
echo munich | cut -c 5
echo casino royale | cut -c 5
echo the fast and the furious | cut -c 5
echo a fish called wanda | cut -c 52
而且如果我将它发送到 bash。我只得到了单词的第X个字母。
我需要用 sed 和其他命令做这个练习。但是我不会用 awk 或 perl。
谢谢
您可以只使用 bash 及其参数扩展:
while read n s ; do
echo "${s:0:n-1}${s:n}"
done < input.txt
如果需要一行,只需删除换行符并添加一个分号:
while read n s ; do echo "${s:0:n-1}${s:n}" ; done < input.txt
如果你真的需要使用sed
和cut
,也可以,但可读性稍差:
cat -n input.txt \
| sed 's/\t\([0-9]\+\).*/s=\(.\{\}\).=\1=/' \
| sed -f- <(sed 's/[0-9]*//' input.txt) \
| cut -c2-
解释:
- 给行编号
- 将每一行变成一个 sed 命令,搜索给定数量的字符并删除后面的字符
- 运行 在删除了数字的原始文件上生成的 sed 命令
- 去掉多余的前导space
你可以这样使用sed
:
sed -e '1s/\([a-z]\)\{1\}//' -e 's/^[0-9]\+\s\+\(.*\)//g' file.txt
第一个 sed
正则表达式作用于第一行并替换第一个字符,第二个正则表达式作用于文本的其余部分,1 列:一个或多个数字,2 列;一个 space 或更多,之后我将剩余的测试放在一场比赛中 \(.*\)
并用这场比赛替换所有。
这可能适合您 (GNU sed):
sed 's/^\([0-9]*\) \(.*\)/echo '\'''\''|sed '\''s\/.\/\/'\''/e' file
这使用 s
命令的 e
标志来评估 RHS 并使用来自 LHS 的反向引用运行第二次 sed 调用。也许更容易理解的是:
sed -r 's/^([0-9]*) (.*)/echo ""|sed "s#.##"/e' file
我需要从单词中删除字母 X: 例如:我需要从 Star Wars 中删除第一个字母,从 munich 中删除第四个字母,...
1 star wars
4 munich
5 casino royale
7 the fast and the furious
52 a fish called wanda
到
tar wars
munch
casio royale
the fat and the furious
a fish called wanda
我已经用 cut 试过了,但是没用。
这是我的命令:
sed 's/^\([0-9]*\) \(.*\)/ echo | cut -c /'
所以它给了我这个输出:
echo star wars | cut -c 5
echo munich | cut -c 5
echo casino royale | cut -c 5
echo the fast and the furious | cut -c 5
echo a fish called wanda | cut -c 52
而且如果我将它发送到 bash。我只得到了单词的第X个字母。
我需要用 sed 和其他命令做这个练习。但是我不会用 awk 或 perl。
谢谢
您可以只使用 bash 及其参数扩展:
while read n s ; do
echo "${s:0:n-1}${s:n}"
done < input.txt
如果需要一行,只需删除换行符并添加一个分号:
while read n s ; do echo "${s:0:n-1}${s:n}" ; done < input.txt
如果你真的需要使用sed
和cut
,也可以,但可读性稍差:
cat -n input.txt \
| sed 's/\t\([0-9]\+\).*/s=\(.\{\}\).=\1=/' \
| sed -f- <(sed 's/[0-9]*//' input.txt) \
| cut -c2-
解释:
- 给行编号
- 将每一行变成一个 sed 命令,搜索给定数量的字符并删除后面的字符
- 运行 在删除了数字的原始文件上生成的 sed 命令
- 去掉多余的前导space
你可以这样使用sed
:
sed -e '1s/\([a-z]\)\{1\}//' -e 's/^[0-9]\+\s\+\(.*\)//g' file.txt
第一个 sed
正则表达式作用于第一行并替换第一个字符,第二个正则表达式作用于文本的其余部分,1 列:一个或多个数字,2 列;一个 space 或更多,之后我将剩余的测试放在一场比赛中 \(.*\)
并用这场比赛替换所有。
这可能适合您 (GNU sed):
sed 's/^\([0-9]*\) \(.*\)/echo '\'''\''|sed '\''s\/.\/\/'\''/e' file
这使用 s
命令的 e
标志来评估 RHS 并使用来自 LHS 的反向引用运行第二次 sed 调用。也许更容易理解的是:
sed -r 's/^([0-9]*) (.*)/echo ""|sed "s#.##"/e' file