linux - 字符串操作 - 替换某些字符

标签 linux bash sed

我有一个 linux 命令输出如下所示的文件列表:

    folder/folder/folder/file_1
    folder_1/folder/folder/file2

我想格式化此输出以满足以下条件:

  • 最后一个斜杠 (/) 始终替换为三个下划线
  • 除最后一个斜杠外的所有斜杠都替换为一个下划线
  • 文件夹名称中的任何下划线都替换为两个下划线
  • 文件名中的任何下划线保持原样

上面看起来像:

    folder_folder_folder___file_1
    folder__1_folder_folder___file2

如果您也可以解释您的解决方案,那将会很有帮助。谢谢!

最佳答案

# Assume each line in a variable called $value
# Split the values up into dirname and basename
val_dir="${value%/*}"
val_base="${value##*/}"

# Replace underscores in dirname with two underscores
val_dir="${val_dir//_/__}"
# Replace slashes in dirname with single underscore
val_dir="${val_dir//\//_}"

# Re-join dirname and basename with three underscores
result="${val_dir}___${val_base}"

关于linux - 字符串操作 - 替换某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13629906/

相关文章:

linux - Linux给malloc()分配了多少内存?

bash - 为什么我的脚本的输出是 "mv: command not found"而当我直接在 shell 上运行它时却不是?

regex - 删除具有特定模式的行

bash - 如何将 sed 语句(带引号)保存在变量中以供多次调用

linux - 将 "find"找到的文件复制到另一个文件夹

linux - 用 sed 替换第 n 个字符

我们只能重新编译内核源代码树中的内核模块吗?

c - 简单的 C 套接字 HTTP 程序找不到资源 : 404

linux - -bash : module: command not found while loading module

linux - 使用 bash 脚本从文件中删除特定行