小编tha*_*isp的帖子

grep -ril,只显示顶级目录一次

所以我想grep -ril在一个文件夹中做。我希望它只返回匹配的顶级文件夹。

为了显示:

/tmp/: grep -ril "hello"

返回:

tmp1/banan/file
tmp1/banan2/file
tmp2/ape/file
tmp2/ape2/file
Run Code Online (Sandbox Code Playgroud)

预期结果:

tmp1
tmp2
Run Code Online (Sandbox Code Playgroud)

grep

2
推荐指数
2
解决办法
308
查看次数

高效地跳过流的前 N ​​个字节

我知道使用tail -c +N,但它非常慢,并且固定了一个 CPU 核心:

 leijurvs-MacBook-Pro:Downloads leijurv$ time cat /dev/zero | head -c 100000000 | shasum -a 256
a993f8c574e0fea8c1cdcbcd9408d9e2e107ee6e4d120edcfa11decd53fa0cae  -
cat /dev/zero  0.00s user 0.02s system 4% cpu 0.471 total
head -c 100000000  0.01s user 0.03s system 9% cpu 0.470 total
shasum -a 256  0.45s user 0.02s system 99% cpu 0.469 total
 leijurvs-MacBook-Pro:Downloads leijurv$ time cat /dev/zero | head -c 100000000 | tail -c +2 | shasum -a 256
f4be792b71a024a60d77b3ac4c1c2b88ac51480fa25f88d10865827f8c086506  -
cat /dev/zero  0.01s user 0.03s system 0% …
Run Code Online (Sandbox Code Playgroud)

command-line performance pipe macos

2
推荐指数
1
解决办法
1028
查看次数

如何使用 sed 或 awk 等“有条件地”删除换行符?

给定一个包含多行的文件,其中一些=在最后。

我希望加入以下一行结尾的每一=行。任何其他换行符都应保持不变。

我一直无法做到这一点,因为sed似乎是逐行操作的,因此总是“添加”一个换行符。

示例输入:

Apple
Banana milkshake
Cherry =
Pie
Run Code Online (Sandbox Code Playgroud)

应该变成:

Apple
Banana milkshake
Cherry Pie
Run Code Online (Sandbox Code Playgroud)

我完全愿意使用sed/以外的工具awk

sed awk text-processing

2
推荐指数
2
解决办法
549
查看次数

awk replace column value with increment values if length equals

I have non-standard data, which I'd like to standardise

file:

d101 11001
e101 9665
f101 9663
d102 11002
e102 11003
f102 11004
g102 11005
Run Code Online (Sandbox Code Playgroud)

desired output:

d101 11001
e101 12001
f101 12002
d102 11002
e102 11003
f102 11004
g102 11005
Run Code Online (Sandbox Code Playgroud)

so the logic should be, if length of column2 = 4 it should replace it with incremental numbering of a provided series: in this case 1200 is series, & 1, 2, 3 .. are increments.

awk text-processing text-formatting

2
推荐指数
1
解决办法
547
查看次数

在与另一个模式匹配的目录中查找与模式匹配的文件

在我求助于编写 Python 来执行此操作之前,bash 中必须有一种使用 find 或类似工具的方法。我想搜索一棵树,并找到名称与某个模式匹配的所有文件,这些文件位于与另一个模式匹配的目录中。例如:foo_[0-9][0-9]在名为 的目录中命名的所有文件bar_[0-9]。所以,我希望找到所有这些文件(从当前目录):

a/b/bar_4/foo_02
b/bar_0/foo_03
a/b/c/d/bar_8/foo_88
Run Code Online (Sandbox Code Playgroud)

谢谢。

find

2
推荐指数
1
解决办法
1343
查看次数

如何打印字符串的每个第 N 个字符?

这行代码就是这样做的,只是我希望它从第一个字符而不是第 7 个字符开始。

$ echo 1234567890abcdefghijklmnopqrstuvwxy | sed 's/.\{1,7\}\(.\{0,1\}\)/\1/g'
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是

19gow
Run Code Online (Sandbox Code Playgroud)

sed text-processing

1
推荐指数
1
解决办法
1342
查看次数

我们如何使用 sed 用字符串变量替换特定行?

让我们说例如我有一个file.txt包含 3 行:

hello
hello
hello
Run Code Online (Sandbox Code Playgroud)

我有一个名为line=1的变量和一个变量 string substitute=hello1。我想将变量描述的行中的字符串替换为line名为 的新字符串变量substitute

结果更改为files.txt

hello1
hello
hello
Run Code Online (Sandbox Code Playgroud)

我将如何使用sed它?或者awk?如果这就是您的目的,只要我可以输入可以在 while 循环中更改的变量。

bash sed awk text-processing

1
推荐指数
1
解决办法
3771
查看次数

如何通过多个符号链接找到原始文件?

我遇到过符号链接指向其他符号链接的情况,导致我不得不运行多个 ls 命令来尝试跟踪基本文件的存储位置。例如,如果我想知道在 centos 上运行的 java 程序的位置,我通常从 /bin/java 开始,并且在找到实际文件的位置之前必须深入 3-4 个符号链接。

是否有一个简单的 clean 命令可以跟踪所有符号链接,直到找到一个真正的文件并给我基本文件的位置?

command-line symlink command

0
推荐指数
1
解决办法
76
查看次数

有条件地删除少于 4 个字符的行

我想修剪少于 4 个字符的行,除非该行以#or开头!

样本输入:

aa
bbb
 
   
dasasdsad
! f
#
!
# s
a
&B@*!
Run Code Online (Sandbox Code Playgroud)

输出:

dasasdsad
! f
#
!
# s
&B@*!
Run Code Online (Sandbox Code Playgroud)

bash sed awk text-processing

0
推荐指数
1
解决办法
85
查看次数

使用 awk 切换最后两个字段

我正在寻找一种方法来切换制表符分隔文件的最后两个字段。字段的数量因行而异,因此我无法指定字段编号。

我在网上能找到的大部分内容都是针对特定领域的脚本。例如用 awk 交换两列

谢谢!

awk text-processing

0
推荐指数
1
解决办法
358
查看次数