小编Tag*_*int的帖子

Midnight Commander 配置目录位置启动选项

如果你运行 mc -F 你会看到有 [系统数据] 配置目录和 [用户数据] 配置目录

【系统数据】

Config directory: /etc/mc/
Run Code Online (Sandbox Code Playgroud)

[用户数据]

Config directory: /home/<username>/.config/mc/
Run Code Online (Sandbox Code Playgroud)

第一个是系统范围的,第二个是用户特定的。

第二个似乎取决于用户的家庭位置;换句话说,它与它绑定。这意味着,如果您想(临时)以同一用户的身份使用备用配置启动 mc,则无法在不更改(和exporting)之前的 HOME 变量的情况下执行此操作。这种“开始之前更改主页”的解决方法虽然有效,但几乎无法接受,因为它确实会修改用户主页。

你认为有没有办法

  1. 在 mc 启动之前动态更改用户配置目录(命令行选项是最合适的,但它似乎不存在)

  2. 在 mc 启动后立即为用户恢复“自然”HOME,如果之前更改 HOME 是更改用户目录位置的唯一方法

如果同时运行,配置不同的 mc 实例不得相互干扰。

mc

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

修改由行号指定的非相邻行

我提前知道行号,并将它们保存在另一个文件中:

cat linenos
2
15
42
44
... etc
Run Code Online (Sandbox Code Playgroud)

如您所见,这些线不相邻,因此我无法将一个范围用于sed. 目标是修改目标文件行,例如,在它们前面加上一个标记,如 MARKER

直接的方法是sed多次调用来修改每一行:

for l in $(cat linenos)
do 
  sed -i "${l}s/^/MARKER/" target_file
done
Run Code Online (Sandbox Code Playgroud)

这显然会多次调用 sed 。

注意:*这种方法不仅效率低下,而且如果修改不是插入这样的标记,它还会使事情出错。任何行删除或插入 sed 命令(如 dar)都会使 linenos 中的初始行号对于循环中的下一个 sed 运行无效。

你有什么建议来改进/优化?

示例 linenos 文件

cat linenos
2
5
Run Code Online (Sandbox Code Playgroud)

示例 target_file

cat target_file
line one
line two
line three
line four
line five
line six
Run Code Online (Sandbox Code Playgroud)

修改 target_file 的预期结果

cat target_file
line one
MARKERline two
line three
line four
MARKERline five
line …
Run Code Online (Sandbox Code Playgroud)

bash sed

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

标签 统计

bash ×1

mc ×1

sed ×1