2

我需要使用初始位置和最终位置从一行中提取一个子字符串。我认为它应该很容易用 grep 完成,但仍然没有弄清楚如何。

例如,一行 n 个字符,我想提取从 k 位置开始并在该行的 l 位置结束的子字符串。

显然 l, k < n 和 l > k

4

5 回答 5

8

Cut 是一个不错的选择。您可以选择范围和单个字段:

$ echo "123456" | cut -c2-4
234

$ echo "123456" | cut -c1,3,6
136

$ echo "123456" | cut -c1-3,6
1236
于 2013-09-01T21:29:49.990 回答
4

为什么不使用awk

echo "12345678" | awk '{print substr($0, 3, 2);}'
# prints '34'
于 2013-09-01T20:34:17.430 回答
2

如果你使用 bash 你可以这样做:

LINE="strings"
K=3  ## 4th character starting from index 0
L=5  ## 6th character starting from index 0
echo "${LINE:K:L - K + 1}"

在文件的循环中:

while -r read LINE; do echo "${LINE:K - 1:L - K}"; done < file

至于 awk,基于 L 表示位置而不是长度,其中 0 是起始索引:

awk -v k="3" -v l="5" '{ n = length; print substr($0, k, l - k + 1);}' < file
于 2013-09-01T20:38:22.943 回答
1

使用

k=3
echo '123456789' | sed 's/^.\{'$k'\}//'

输出:

456789
于 2013-09-01T23:41:09.073 回答
-1

这是你要找的吗?

    String test = "ateststring";
    String testa = test.substring(0,4);
    String test2 = testa.substring(0,3);
    int testc = test.indexOf("test");
    String test3 = test.substring(testc,5);

    System.out.println(test + ":" + testa + ":" + test2 + ":" +test3);
于 2013-09-01T20:36:12.720 回答